“Não foi possível carregar o tipo” no serviço web convertido para VB.NET
-
09-06-2019 - |
Pergunta
Escrevi um serviço web simples em C# usando SharpDevelop (que acabei de adquirir e adoro).
O cliente queria isso em VB e, felizmente, há um recurso Convert To VB.NET.É ótimo.Traduziu todo o código e ele foi compilado.(Eu sou um cara do “bloco de notas” há muito tempo, então posso parecer um pouco antiquado.)
Mas recebo este erro quando tento carregar o serviço agora.
Parser Error Message: Could not load type 'flightinfo.Soap' from assembly 'flightinfo'. Source Error: Line 1: <%@ WebService Class="flightinfo.Soap,flightinfo" %>
Excluí as caixas e as reconstruí, e pesquisei no Google (e no stackoverflow).Eu vasculhei os arquivos do projeto em busca de vestígios de C#.
Alguma ideia?
Solução
No VB.NET, as declarações de namespace são relativas ao namespace padrão do projeto.Portanto, se o namespace padrão do projeto estiver definido como X.Y, tudo entre Namespace Z
e End Namespace
estará no namespace X.Y.Z.Em C# você deve fornecer o nome completo do namespace, independentemente do namespace padrão do projeto.Portanto, se o projeto C# tivesse o namespace padrão X.Y, os arquivos CS ainda incluiriam o namespace X.Y
declaração.Após a conversão para VB, se o namespace padrão e as declarações de namespace nos arquivos permanecerem iguais, você terá classes no namespace X.Y.X.Y.Portanto, no seu caso, a classe Soap está agora no namespace flightinfo.flightinfo.Assim, existem três soluções possíveis:
altere o arquivo asmx para
remova o namespace padrão do projeto
- remova as declarações de namespace dos arquivos vb
Outras dicas
<%@ WebService Class="flightinfo.Soap,flightinfo" %>
Qual é o nome da sua turma?
O problema pode ser causado por projetos VB.NET e C# que usam diferentes convenções de nomenclatura para assemblies do projeto e como o namespace do projeto é usado.Pelo menos é aí que eu começaria a procurar.