Estoy intentando crear una vista fuertemente tipada basada en una clase de otro ensamblado. Sin embargo, por alguna razón, mi vista de Razor no parece tener ninguna visibilidad de otros ensamblados a los que se hace referencia en mi proyecto. p.ej
@model MyClasses.MyModel
da como resultado el error en Visual Studio 2010, "No se MyClasses
pudo encontrar el tipo o el nombre del espacio de nombres (¿falta una directiva using o una referencia de ensamblado?)".
La misma clase a la que se hace referencia en el motor de vista estándar funciona bien. Tengo el mismo problema al intentar hacer referencia a la clase en el cuerpo de mi vista.
¿Me falta algo sobre Razor o necesito hacer referencia al ensamblado de alguna otra manera?
asp.net-mvc
asp.net-mvc-3
razor
Nickwesselman
fuente
fuente
Respuestas:
Hay una nueva sección de configuración que se usa para hacer referencia a los espacios de nombres para las vistas de Razor.
Abra el
web.config
archivo en suViews
carpeta y asegúrese de que tenga lo siguiente:Alternativamente, puede agregar declaraciones using a su diseño compartido:
Después de editar Web.config, reinicie Visual Studio para aplicar los cambios.
fuente
Copy Local = true
. Es posible que los ensamblajes externos no funcionen de otra manera.Tuve el mismo problema: MVC3 Project MyCore.Web hacía referencia al espacio de nombres MyCore.DBLayer de otro proyecto en la misma solución (con el nombre de ensamblado MyCoreDBLayer). Todos los objetos de MyCore.DBLayer funcionaron perfectamente en controladores y modelos, pero fallaron en las vistas de Razor con un error 'El tipo o nombre del espacio de nombres' DBLayer 'no existe en el espacio de nombres' MyCore '(¿le falta una referencia de ensamblaje?)' Que era obviamente no es el caso.
Agregar referencia de ensamblaje a la sección system.web / compilation / ensambles del archivo raíz web.config solucionó el problema. La sección ahora se ve así:
Omitir versión, cultura, token estaba bien por ahora, pero debería arreglarse en el futuro.
fuente
Views/web.config
y funcionó cuando se colocó allí también.En mi caso, el proyecto separado que contenía el espacio de nombres era una aplicación de consola. Cambiarlo a una biblioteca de clases solucionó el problema.
fuente
Ninguno de los anteriores funcionó para mí tampoco;
Pero finalmente encontré algo que funcionó para mí:
Fue porque tenía mi Salida de compilación yendo a bin \ Debug \ para configuración de depuración y bin \ Release \ para configuraciones de versión. Tan pronto como cambié la configuración de compilación a "bin \" para todas las configuraciones (según la imagen a continuación), ¡todo comenzó a funcionar como debería!
No tengo idea de por qué la separación de sus compilaciones en las carpetas Release y Debug debería hacer que la sintaxis de Razor se rompa, pero parece ser porque algo no pudo encontrar los ensamblados. Para mí, los proyectos que tenían problemas de sintaxis de afeitar son en realidad mis proyectos de 'biblioteca de afeitar'. Están configurados como proyectos de aplicación, sin embargo, los uso como bibliotecas de clases con RazorGenerator para compilar mis vistas. Cuando intenté ejecutar uno de estos proyectos directamente, causó el siguiente error de configuración:
Esto me llevó a intentar cambiar la salida de la compilación, ya que me di cuenta de que para todos los proyectos web la salida de la compilación parece estar siempre directamente en la carpeta bin, a diferencia de la predeterminada para las bibliotecas de clases, que tienen carpetas de liberación y depuración.
fuente
Parece que está buscando esta respuesta: https://stackoverflow.com/a/4136773/176877
Es decir, abra el Views \ Web.Config interno (NO el raíz) y agregue el espacio de nombres debajo de la etiqueta Pages:
Guárdelo, luego cierre y vuelva a abrir el archivo Razor.
Si está utilizando Áreas, deberá hacer esto para cada Web.Config en cada Área.
Visual Studio se ha vuelto más problemático a lo largo de los años, por lo que puede requerir cerrar el archivo Razor ejecutando una compilación de depuración y luego volver a abrir el archivo Razor, o en el peor de los casos, puede requerir reiniciar Visual Studio. Pero en última instancia, le presentará el archivo Razor como si todo en esa lista de espacios de nombres estuviera en declaraciones @using en la parte superior de todas sus Vistas.
fuente
En ASP.NET Core MVC, la solución es agregar un
using
en _ViewImports.cshtml, en lugar de ponerlo web.config en la carpeta Ver cuando se trabaja con ASP.NET MVC 5._ViewImports.cshtml
Ver
fuente
Para mí, estaba haciendo referencia a un proyecto que era una aplicación de consola. Se configuró para compilarse como un exe (aplicación de consola) en lugar de una biblioteca de clases (DLL). Cuando cambié esto, pude ver los modelos de ese proyecto separado sin problemas.
fuente
Recibí el mismo error al intentar usar objetos Smo en una vista de Razor. Aparentemente, esto se debe a que Razor no puede encontrar las DLL a las que se hace referencia en el proyecto. Resolví esto estableciendo "Copiar local" en verdadero para todos los dlls de Smo, sin embargo, podría haber una mejor solución (ver el enlace de Czechdude arriba) @using y las ediciones web.config son inútiles porque solo son necesarias si desea omitir el espacio de nombres parte de los nombres de los tipos (por ejemplo, Server en lugar de Microsoft.SqlServer.Management.Smo.Server)
fuente
Recibí un error similar después de mover mi máquina de desarrollo de Win7 32bit a Win7 64bit. Mensaje de error:
...\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
Resulta que tenía ambas versiones en el GAC. La vista hacía
web.config
referencia a v1, pero la aplicación hacía referencia a v2. Se eliminaron los ensamblados a los que se hace referencia y se volvió a agregar v1. deSystem.Web.WebPages.Razor
, etc.fuente
bueno, para mi fue diferente. Faltaba el ensamblaje de mi proyecto de aplicación de consola con el proyecto MVC. Entonces, agregar una referencia no fue suficiente.
bueno, esto podría ayudar a alguien más. vaya al archivo raíz web.config
system.web
->compilation
-> agregue la referencia de su proyecto de esta manera.<assemblies> <add assembly="Your.Namespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> </assemblies>
fuente
También tuve el mismo problema, pero el problema estaba en el marco de Target del ensamblaje .
El ensamblado al que se hace referencia estaba en .NET Framework 4.6, donde el proyecto se configuró en .NET Framework 4.5.
Espero que esto ayude a alguien que se haya equivocado con los marcos.
fuente
El nombre de la CARPETA del proyecto debe ser el mismo. Si el nombre de su proyecto o solución es diferente, MVC lo perjudicará.
Ejemplo: si crea una nueva aplicación y obtiene el nombre predeterminado Webapplicaiton1, se creará este espacio de nombres. Por lo tanto, digamos que no desea tener este espacio de nombres, por lo que desde el VS cambia todos los lugares que pueda ver a "MyNamespace". También busca y reemplaza todo el código de "Webapplication1" y lo reemplaza con "MyNamespace". Esto también cambia el archivo web.config, para que incluya
Ahora todo funcionará, excepto las vistas de Razor.
RazorViews no puede encontrarlo, porque existe algún tipo de dependencia extraña en el FOLDERNAME del proyecto. Es un diseño terrible.
He probado esto semi-a fondo copiando mis archivos en una nueva solución, y la única diferencia es el nombre de la carpeta.
fuente
Intente agregar el espacio de nombres en el que se
MyClasses
encuentra en web.config en<pages> <namespaces></namespaces> </pages>
fuente
incluir todo el espacio de nombres
fuente
Ninguno de estos https://stackoverflow.com/a/7597360/808128 funciona para mí. Incluso "agregar referencia de ensamblaje a la sección system.web / compilation / ensambles del archivo raíz web.config". Así que las dos formas me quedan: 1) agregar una clase de envoltura pública para mi ensamblado a la que el código de Razor pueda acceder a este ensamblado a través de esta envoltura; 2) simplemente agregue lógica de ensamblaje a una clase pública en el mismo ensamblado donde se encuentra el código de Razor.
fuente
Además de hacer los cambios de web.config para
<assemblies>
y<namespaces>
, descubrí que GAC'ing el ensamblado hizo una gran diferencia. Puede aplicar la cultura y el token de clave pública como cualquier ensamblado principal de .NET que esté registrado globalmente.Algunos pueden estremecerse ante la mención del GAC. Pero como desarrollador de BizTalk, he llegado a adoptarlo.
fuente
Esta solución funcionó para mí (es gracioso, pero funciona)
Edité las páginas de la vista, copié el contenido y lo pegué, no cambié ningún contenido de las vistas, solo las edité para que Visual Studio pudiera hacer lo necesario para rastrear las páginas, y luego todo comenzó a funcionar.
Solución: simplemente edite las páginas y reemplácelas con las mismas páginas (funcionó para mí)
fuente
en modelos de nombre de espacio, yourClassModel, agregue público antes de la clase de nombre
fuente
En mi caso, el paquete que intenté usar hacía referencia al estándar 2.1 de .net, mientras que mi proyecto de biblioteca de clases de afeitar estaba configurado en 2.0
fuente