Estou tentando criar um modo de exibição fortemente tipado com base em uma classe de outro assembly. Por alguma razão, porém, minha visualização Razor não parece ter qualquer visibilidade de outras montagens referenciadas em meu projeto. por exemplo
@model MyClasses.MyModel
resulta no erro no Visual Studio 2010, "O tipo ou nome do namespace MyClasses
não foi encontrado (está faltando uma diretiva using ou uma referência do assembly?)."
A mesma classe referenciada no mecanismo de exibição padrão funciona bem. Tenho o mesmo problema ao tentar fazer referência à classe no corpo do meu ponto de vista.
Estou perdendo algo sobre o Razor ou preciso fazer referência à montagem de outra forma?
asp.net-mvc
asp.net-mvc-3
razor
nickwesselman
fonte
fonte
Respostas:
Há uma nova seção de configuração que é usada para referenciar namespaces para visualizações do Razor.
Abra o
web.config
arquivo em suaViews
pasta e verifique se ele contém o seguinte:Como alternativa, você pode adicionar instruções usando ao seu layout compartilhado:
Depois de editar o Web.config, reinicie o Visual Studio para aplicar as alterações.
fonte
Copy Local = true
. Os conjuntos externos podem não funcionar de outra forma.Eu tive o mesmo problema: MVC3 Project MyCore.Web estava fazendo referência ao namespace MyCore.DBLayer de outro projeto na mesma solução (com o nome do assembly MyCoreDBLayer). Todos os objetos de MyCore.DBLayer funcionaram perfeitamente em controladores e modelos, mas falharam em visualizações Razor com um erro 'O tipo ou nome do namespace' DBLayer 'não existe no namespace' MyCore '(está faltando uma referência de assembly?)' Que foi obviamente não é o caso.
Adicionar referecene de assembly à seção system.web / compilation / assemblies do arquivo web.config raiz corrigiu o problema. A seção agora se parece com:
A omissão de versão, cultura e token estava OK por enquanto, mas deve ser corrigido no futuro.
fonte
Views/web.config
e funcionou quando foi colocado lá também.No meu caso, o projeto separado que continha o namespace era um aplicativo de console. Mudá-lo para uma Biblioteca de Classes corrigiu o problema.
fonte
Nenhuma das opções acima funcionou para mim também;
Mas finalmente encontrei algo que funcionou para mim:
Foi porque eu tinha meu Build Output indo para bin \ Debug \ para configuração de Debug e bin \ Release \ para configurações de versão. Assim que alterei a configuração de construção para "bin \" para todas as configurações (conforme imagem abaixo), tudo começou a funcionar como deveria !!!
Não tenho ideia de por que separar seus builds nas pastas Release e Debug deveria causar a quebra da sintaxe do Razor, mas parece que algo não conseguiu encontrar os assemblies. Para mim, os projetos que apresentavam problemas de sintaxe do razor são, na verdade, meus projetos de 'biblioteca do razor'. Eles são definidos como Projetos de aplicação, entretanto eu os uso como bibliotecas de classes com RazorGenerator para compilar minhas visualizações. Quando eu realmente tentei executar um desses projetos diretamente, isso causou o seguinte erro de configuração:
Isso me levou a tentar alterar o Build Output, pois percebi que, para todos os projetos da web, o Build Output parece estar sempre diretamente para a pasta bin, ao contrário do padrão para bibliotecas de classe, que têm pastas de liberação e depuração.
fonte
Você parece estar procurando por esta resposta: https://stackoverflow.com/a/4136773/176877
Ou seja, abra o Views \ Web.Config interno (NÃO o raiz) e adicione o namespace na tag Pages:
Salve isso, feche e reabra o arquivo Razor.
Se você estiver usando áreas, você precisará fazer isso para cada Web.Config em cada área.
O Visual Studio ficou mais problemático com o passar dos anos, portanto, pode ser necessário fechar o arquivo Razor executando uma compilação de depuração e, em seguida, reabrir o arquivo Razor ou, na pior das hipóteses, exigir a reinicialização do Visual Studio. Mas, no final das contas, ele apresentará o arquivo Razor a você como se tudo na lista de namespaces estivesse em instruções @using no topo de todas as suas visualizações.
fonte
No ASP.NET Core MVC, a solução é adicionar um
using
em _ViewImports.cshtml, em vez de colocá-lo web.config na pasta View ao trabalhar com a ASP.NET MVC 5._ViewImports.cshtml
Visão
fonte
Para mim, estava me referindo a um projeto que era um aplicativo de console. Ele foi configurado para ser construído como um exe (aplicativo de console) em vez de uma biblioteca de classes (DLL). Quando mudei isso, pude ver os modelos daquele projeto separado sem problemas.
fonte
Eu estava recebendo o mesmo erro ao tentar usar objetos Smo em uma visualização do Razor. Aparentemente, isso ocorre porque o Razor não consegue encontrar as DLLs referenciadas no projeto. Resolvi isso definindo "Copiar local" como verdadeiro para todas as dlls Smo, no entanto, pode haver uma solução melhor (consulte o link do Czechdude acima). As edições de @using e web.config são inúteis porque são necessárias apenas se você quiser omitir o namespace parte dos nomes de tipo (por exemplo, Servidor em vez de Microsoft.SqlServer.Management.Smo.Server)
fonte
Eu estava recebendo um erro semelhante depois de mover minha máquina de desenvolvimento de Win7 de 32 bits para Win7 de 64 bits. Mensagem de erro:
...\Web\Views\Login.cshtml: ASP.net runtime error: [A]System.Web.WebPages.Razor.Configuration.HostSection cannot be cast to [B]System.Web.WebPages.Razor.Configuration.HostSection. Type A originates from System.Web.WebPages.Razor, Version=1.0.0.0 ... Type B originates from ... Version=2.0.0.0
Acontece que eu tinha as duas versões no GAC. A visualização
web.config
referenciava a v1, mas o aplicativo fazia referência à v2. Removidos os assemblies referenciados e v1 novamente adicionados. deSystem.Web.WebPages.Razor
, etc.fonte
bem, para mim foi diferente. Eu estava perdendo a montagem do meu projeto de aplicativo de console com o projeto MVC. Portanto, adicionar referência não foi suficiente.
bem, isso pode ajudar outra pessoa. vá para o arquivo web.config root
system.web
->compilation
-> adicione sua referência de projeto desta forma.<assemblies> <add assembly="Your.Namespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> </assemblies>
fonte
Eu também tive o mesmo problema, mas o problema era com a estrutura de destino da montagem .
O assembly referenciado estava no .NET Framework 4.6, onde o projeto foi definido como .NET framework 4.5.
Espero que isso ajude alguém que mexeu com frameworks.
fonte
O nome da FOLDER do seu projeto deve ser o mesmo. Se o nome do seu projeto ou solução for diferente, MVC irá prejudicá-lo.
Exemplo: se você criar um novo aplicativo e ele obtiver o nome padrão Webapplicaiton1, este namespace será criado. Então, vamos dizer que você não quer ter este namespace, então do VS você muda em todos os lugares que pode ver para "MyNamespace". Você também pesquisa e substitui todo o código de "Webapplication1" e substitui-o por "MyNamespace". Isso também muda o arquivo web.config, de modo que inculde
Agora tudo funcionará, exceto as visualizações do Razor.
RazorViews não consegue encontrá-lo, porque há algum tipo de dependência estranha na FOLDERNAME do projeto. É um design terrível.
Eu testei isso quase completamente, copiando meus arquivos para uma nova solução, e a única diferença é o nome da pasta.
fonte
Tente adicionar o namespace
MyClasses
em que está ao web.config em<pages> <namespaces></namespaces> </pages>
fonte
inclui todo o namespace
fonte
Nenhum desses https://stackoverflow.com/a/7597360/808128 funciona para mim. Até mesmo "adicionando referecene de montagem à seção system.web / compilation / assemblies do arquivo web.config raiz". Portanto, restam duas maneiras para mim: 1) adicionar uma classe de wrap público para meu assembly que o código do Razor pode acessar a esse assembly por meio desse wrap; 2) basta adicionar a lógica do assembly a uma classe pública no mesmo assembly onde o código do Razor está localizado.
fonte
Além de fazer as alterações do web.config para
<assemblies>
e<namespaces>
, descobri que fazer o GAC na montagem fez uma grande diferença. Você pode aplicar cultura e token de chave pública como qualquer assembly .NET principal registrado globalmente.Alguns podem estremecer com a menção do GAC. Mas, como desenvolvedor de BizTalk, aprendi a adotá-lo.
fonte
Esta solução funcionou para mim (é engraçado, mas funciona)
Eu editei as páginas de visualização e copiei o conteúdo e colei nelas, não mudei nenhum conteúdo das visualizações, apenas editei para que o estúdio visual pudesse fazer o acompanhamento das páginas e depois tudo começou a funcionar
Solução - Apenas edite as páginas e substitua pelas mesmas páginas (funcionou para mim)
fonte
em modelos de nome de espaço, yourClassModel, adicione público antes da classe de nome
fonte
No meu caso, o pacote que tentei usar fazia referência ao .net padrão 2.1, enquanto meu projeto de biblioteca de classes de navalha estava definido como 2.0
fonte