Erro BC30002 - Tipo XXX não está definida
-
01-07-2019 - |
Pergunta
OK, isso começa a me deixar louco. Eu tenho um webapp asp.net. Bastante simples, a maior parte do código no .aspx.vb, e algumas aulas em App_Code.
O problema, que começou a ocorrer somente hoje (embora a maior parte do código já foi escrito), é que de vez em quando, eu tenho essa mensagem de erro:
Erro BC30002: tipo ‘XXX’ não está definido
O erro ocorre sobre cada vez que modificar os arquivos na pasta App_Code. EDIT: OK, isso acontece também se eu não tocar em nada por um tempo, em seguida, atualize a página. Eu ainda estou tentando descobrir exatamente como provocar este erro.
Eu só tenho que esperar um pouco sem tocar em nada, em seguida, atualize a página e ele funciona, mas é muito chato.
Então eu procurei um pouco, mas nada veio, exceto as importações em falta. Alguma idéia?
Solução 2
Eu acho que encontrei o problema.
Meu código era assim:
Imports CMS
Sub Whatever()
Dim a as new Arbo.MyObject() ' Arbo is a namespace inside CMS
Dim b as new Util.MyOtherObject() ' Util is a namespace inside Util
End Sub
Eu não tenho certeza porque eu escrevi isso assim, mas acontece que o fato de que eu estava chamando aulas sem qualquer chamando toda a sua namespace ou importar todo o seu namespace foi acionando o erro.
Eu reescrevi-lo assim:
Imports CMS.Arbo
Imports CMS.Util
Sub Whatever()
Dim a as new MyObject()
Dim b as new MyOtherObject()
End Sub
E agora ele funciona ...
Outras dicas
soa como uma questão de compilação pre, particularmente porque você mencionar que você obter o erro e, em seguida, esperar e ela desaparece. ASP.NET pode ser ainda no processo de compilação de forma dinâmica a sua aplicação ou que compilou os tipos em diferentes montagens.
Com a compilação dinâmica, você não está garantido para ter diferentes arquivos codebehind compilados no mesmo conjunto. Assim, o tipo que você está fazendo referência pode não ser capaz de ser resolvido no âmbito da sua pré-compilados montagem.
Tente usar a directiva "@Reference" para indicar ao tempo de execução que sua página e o arquivo que contém o seu tipo deve ser compilado no mesmo conjunto.
Isto aconteceu-me depois que eu adicionei um novo projeto para uma solução de idade. Baixei a estrutura de destino para coincidir com a dos outros projectos 'mais velhos' e o erro foi embora.
Parece que isso acontece toda vez que o site gira para cima (o aplicativo é reciclado a cada vez que você tocar App_Code e provavelmente você tem IIS configurado para encerrar o website após X minutos de inatividade).
Eu aposto que tem algo a ver com o processo de trabalho asp.net não ter os direitos de acesso corretos no servidor. Portanto, a sua tentativa de carregar uma montagem e está sendo negado.
Confira neste link e Tabela 19.3 para uma lista de todos as pastas da conta do processo de trabalho deve ter acesso a, a fim de função. E não se esqueça de dar direitos a todos os arquivos e pastas no seu diretório virtual!
Substitua seu VBPROJ e arquivo vbproj.user do seu backup antes se as referências são iguais