El tipo 'Expresión <>' se define en un ensamblado al que no se hace referencia

84

En ASP.NET MVC 4.5.2 Framework.

después de escribir

@Html.LabelFor()
or 
@Html.EditorFor()

en vista

Recibo un error: el tipo 'Expresión <>' está definido en un ensamblado al que no se hace referencia. Debe agregar una referencia al ensamblado 'System.Core, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089'.

He agregado la referencia de ensamblado System.Core.dll, versión 4.0.0.0, versión en tiempo de ejecución v4.0.30319. y también lo hice en web.config

mansoor
fuente

Respuestas:

41

Me he encontrado con el mismo problema que tú, aunque mucho más tarde. El problema era que no podía acceder a las vistas de Razor (.cshtml) porque recibía un error que indicaba que faltaba una referencia de ensamblaje, es decir System.Web.Mvc, aunque estaba en las referencias del proyecto. Después de investigar, noté que la versión de NuGet instalada era 5.2.3, mientras que el proyecto requería 5.2.0. La solución es degradar la versión MVC.

  1. Vaya a Proyecto-> Administrador de paquetes NuGet.
  2. Busque MVC; será el primer resultado.
  3. Lo siguiente es seleccionar la degradación del menú desplegable en los detalles del paquete NuGet y enviarlo.

Confirme todos los diálogos y estará listo para comenzar.

Prashant2008
fuente
14
¿Cómo notó que su proyecto requería 5.2.0?
Vanice
3
@Vanice Creo que depende de la versión de .NET Framework: .NET 4.5.2 -> MVC 4.0.0; .NET 4.6.0 -> MVC 5.2.0; .NET 4.6.1 -> MVC 5.2.3. (No confirmado)
JoaoRibeiro
9
Estoy usando .net 4.7 y todavía tengo este molesto error
Sven
1
Tuve el mismo problema, resulta que mi valor de depuración en web.config se estableció en falso. Configúrelo en "True" <compilation debug = "true" targetFramework = "4.5" /> <httpRuntime targetFramework = "4.5" />
mlaribi
He probado la solución anterior, está funcionando bien. Mi versión de la solución VS era 4.6.2 y bajé el MVC a 5.2.3 de 5.2.4. Entonces supe que MVC 5.2.3 es compatible con .Net 4.6.2
Ibrahim Inam
58

No estoy seguro de si todavía tiene este problema o no, pero yo también tenía el mismo problema.

Pude encontrar las soluciones aquí

/programming/6496223/compilation-error-in-net-4-0-web-config-linq-not-found

<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

Espero que esto ayude..

ctm1988
fuente
Ya dije que ... he probado este antes de publicar esta pregunta. de todas formas gracias a los dos
mansoor
1
¡multa! Funciona. Tenga en cuenta que debe cerrar y volver a abrir el archivo cshtml para que surta efecto.
Mahdi Ataollahi
Esto funcionó para mí una vez que revisé todos los web.configs y me aseguré de que las versiones coincidieran como en stackoverflow.com/a/37381294/8684119
AMG
Funciona, pero encontré esta solución un poco sucia. De todos modos, en mi caso agrego solo la referencia a System.Core
T-moty
45

Este error significa que Visual Studio no puede ubicar el ensamblado System.Web.Mvc para alimentar su intellisense para las vistas de Razor. Es posible que se requieran uno o ambos de los siguientes para solucionarlo.

  1. Asegúrese de que la versión del marco .NET para la propiedad de compilación en el web.config principal (la que está en la raíz del sitio web) sea la misma que la especificada en las propiedades del proyecto.

[root] /Web.config:

<system.web>
    <compilation targetFramework="4.6" />

Propiedades del proyecto:

Propiedades del proyecto

  1. Asegúrese de que la versión del ensamblado MVC especificada en las vistas web.config (la que está en la carpeta de vistas) sea la misma que la del ensamblado MVC que está utilizando en su proyecto.

[carpeta de vistas] /web.config:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Propiedades de referencia de ensamblado MVC:

Versión MVC

Tom Bowers
fuente
3
Esto funcionó para mí. Muchas gracias.
vibs2006
1
Esto también lo resolvió para mí, pero no directamente. Tuve que eliminar el archivo con la versión incorrecta de mi carpeta bin, actualizar mvc a través de nuget, y luego colocó la versión correcta en mi carpeta bin y funcionó. si sigue obteniendo la versión incorrecta en la carpeta bin después de actualizar a través de nuget, elimine la existente en la carpeta bin
Joshua K
Gracias. Actualicé Microsoft.AspNet.Mvc a través de NuGet a v5.2.7 y comencé a ver este error en el archivo .schtml, mientras la aplicación aún funcionaba. Resultó que web.config en la carpeta Vistas en <system.web.webPages.razor> todavía era v5.2.3. Modificarlo a v5.2.7 ayudó.
vkelman
Esto funcionó, ¡gracias! Recordarme comprobar [Vistas] /web.config fue clave para mí. ¡Versión coincidente en todas partes menos allí!
Jay Dawkins
21
  • Cierre el archivo cshtml
  • Reconstruir solución
  • Abrir archivo cshtml
  • ¿Sigue habiendo errores? Reiniciar Visual Studio
  • ¿Sigue habiendo errores? Utilice la respuesta de ctm1988
CularBytes
fuente
He intentado todo se mencionó aquí ... pero todavía no su trabajo .. mientras que volver a instalar Visual Studio funciona perfectamente sus .. pensé dependencias falta es la razón ..
mansoor
Si ha tenido un proyecto que estaba funcionando bien y de repente tiene este problema, ¡probablemente esta sea la solución!
Simon_Weaver
No puedo creer la frecuencia con la que esto funciona
nmit026
16

Probé la mayoría de estos, lo que finalmente funcionó para mí fue descargar el proyecto, editar el archivo csproj y agregar lo siguiente:

<Reference Include="System.Core" />

https://stackoverflow.com/a/38371981/2335660

leyla azari
fuente
2
¡funciona! Parece que el estudio visual piensa que System.Core ya se ha agregado, pero en realidad no. Por lo tanto, debe hacer esto manualmente
isxaker
10

Eliminar el archivo [projectName] .csproj.user del directorio del proyecto me ayudó.

Robo quemado
fuente
Trabajó para mí Vs 2017 Asp MVC5
Speuline
2
Este funcionó, VS 2019 y MVC5. También limpié las carpetas bin / obj y .vs.
Clemencia
7

Simplemente tuve exactamente el mismo problema y ninguna de las soluciones solucionó el problema. Tuve que agregar esto a mi web.configinteriorSystem.Web

<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />

Lo había quitado al cambiar algunos de los configalrededores.

jsanman
fuente
por favor agregue la etiqueta con cualquier tecnología o más .. No se encontraron etiquetas
Vikrant Kashyap
Agregar el atributo compilation / targetFramework funcionó para mí.
Tom Bowers
Accidentalmente había agregado dos valores diferentes para el marco de destino, esto resolvió mi problema.
Geethanga
Esto solucionó el problema para mí, una aplicación asp.net/webforms híbrida: actualicé el marco de destino de mi aplicación a 4.7, no noté que estas dos configuraciones de web.config todavía apuntaban a 4.5.
Tom Regan
mismo problema resuelto por esta respuesta en 4.8
Mamdouh
4

En mi caso, este mensaje se mostró solo cuando Resharper estaba activado. Borré el caché de Resharper, reinicié VS, desactivé Resharper y lo encendí nuevamente. El mensaje ha desaparecido.

Neshta
fuente
1
En mi caso, simplemente cierre y reinicie VS. Tengo resharper pero no necesito hacer nada con él.
JayJay
3

Tuve el mismo problema con el ensamblaje faltante y sucedió que la compilación VS2017 no lo copió correctamente en la carpeta Bin. Estos pasos me ayudaron:

  • Navegue hasta el nodo Referencias del proyecto web
  • Encuentre la referencia a System.Core
  • Abra la ventana de propiedades de VS
  • En la ventana de propiedades, cambie Copiar local: falso a verdadero

de este comentario: CS0012: El tipo '##### Cualquier tipo #####' se define en un ensamblado al que no se hace referencia

Angel_D
fuente
Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden dejar de ser válidas si cambia la página enlazada. - De la crítica
Steve Gomez
1
@SteveG. ¡Gracias, Steve! Lo he editado. No he comentado mucho antes y me falta un poco de etiqueta SO ... :-)
Angel_D
1
Este resolvió mi problema, debo mencionar que también se necesitaba un reinicio de Visual Studio, gracias.
Saeed Mousavi
3

En Web.config necesitaba cambiar:

  <system.web>
    <compilation debug="true" targetFramework="4.7">

a

  <system.web>
    <httpRuntime targetFramework="4.7" />
    <compilation debug="true" targetFramework="4.7">
juFo
fuente
1
¡Gracias, @juFo! Esto fija por mí en Visual Studio 2019 con el marco de la meta del proyecto MVC 5. Mi MVC fue 4.7.2, mientras que el web.config todavía tenía 4.7.1 para el targetFrameworken el <httpRuntime>y <compilation>etiquetas. Simplemente actualizando el atributo para reflejar correctamente la versión de .NET Framework del proyecto me lo arregló.
iCode
2

Compruebe que la acción de compilación del archivo cshtml esté establecida en 'Contenido'.

Utilizo ReSharper y he notado que, por alguna razón, el archivo que se genera tiene el valor predeterminado "Ninguno" al invocar la plantilla.

Kevin R.
fuente
2

Agregue lo siguiente a Web.config (en la raíz). Probé absolutamente todas las sugerencias anteriores y nada funcionó hasta que encontré lo siguiente. Espero que le ahorre tiempo a alguien más.

Yo uso targetFramework = "4.6.1", pero cámbielo a la versión que usa si es diferente.

<system.web>
   <compilation debug="true" targetFramework="4.6.1" />
   <httpRuntime targetFramework="4.6.1" />
</system.web>
Njål Eide
fuente
2

Agregue el archivo System.Core.dll a la carpeta bin manualmente. Reinicie VS y compile el proyecto . Resuelto para mi

Tuve errores de diseño en todas las vistas en los ayudantes de @Html y en mis cuadrículas de Kendo.

Agregar el ensamblaje System.Core en Web.config no hizo nada, ni tampoco degradar la versión MVC. Y error al intentar agregar una referencia a System.Core manualmente:

No se pudo agregar una referencia a 'System.Core'. El sistema de compilación ya hace referencia automáticamente a este componente.

Asegúrese de verificar que TargetFramework en las propiedades del proyecto coincida con el del proyecto web.config.

Captura de pantalla de la carpeta bin

pkucas
fuente
1

Para mí, había una opción en el menú del proyecto para "Habilitar C # 6.0 / VB 14". Seleccionar esta opción funcionó. Anteriormente intenté modificar web.config, reiniciar Visual Studio, etc., como se sugirió en esta publicación.

Aggromonster
fuente
1

Me enfrenté al mismo problema. Básicamente, el problema es usar una versión diferente de System.Web.Mvc. Así que lo mejor que debes abrir es Tools > Nuget Package Manager > Manage Nuget Packages for Solution. Probablemente puedas ver System.Web.Mvcen la Cosolidatepestaña. Actualizar o degradar sería la mejor opción. Si usa el último marco .Net, que es actualmente .Net 4.6.1, debe actualizar todas las System.Web.Mvcversiones a 5.2.4.0. ¡Buena suerte!

Mehmet Taha Meral
fuente
Tenía 12 paquetes que debían actualizarse y el sln se ejecutó sin problemas una vez que actualicé todo. Gracias.
Jamie
1

Bueno, lo solucioné corrigiendo la referencia de ensamblaje en /Views/web.config , vea la imagen:

ingrese la descripción de la imagen aquí

Altaf
fuente
1

elimine el directorio bin, .vs y obj. después de construir su proyecto en Visual Studio.

Nisanur
fuente
Hago muchos cambios entre las versiones de mi proyecto, algunas que se dirigen a diferentes marcos. Esto solucionó mi error de referencia "System.Core". Gracias por el simple recordatorio de que a veces es necesario limpiar el entorno VS entre pagos.
Suncat2000
0

Esto sucedió con una de mis opiniones, todas las demás estaban bien. Hice lo siguiente:

  • Crea una nueva vista
  • Copie y pegue el contenido de la vista anterior en la nueva
  • Borrado el antiguo
  • Renombrado el nuevo por el antiguo
Liam
fuente
0

Reiniciar Visual Studio funcionó para mí.

Mangesh Kadam
fuente
Esto me sucedió después de algunas actualizaciones de NuGet aparentemente inocentes. Solo eran bibliotecas como jQuery y bootstrap. Después de las actualizaciones recibí este mensaje de error y reiniciar Visual Studio lo solucionó.
Steve Hiner
0
  • Cerrar el archivo
  • Limpiar la solución
  • Construye la solución
  • Reabrir el archivo
Jeph
fuente
0

Intenta agregar

using system.Linq.Expressions;

usuario1223339
fuente
4
Si bien este fragmento de código puede resolver la pregunta, incluir una explicación realmente ayuda a mejorar la calidad de su publicación. Recuerde que está respondiendo a la pregunta para los lectores en el futuro, y es posible que esas personas no conozcan los motivos de su sugerencia de código.
Farkie
0

Yo tuve este problema también. Cambiar targetFramework="4.5.2"a targetFramwork="4.5" en el archivo web.config lo resolvió.

maryam b
fuente
0

Si obtiene esto en solo uno o dos archivos CSHTML ... es un archivo dañado.

Me ha pasado esto con un archivo corrupto que tiene algunos caracteres Unicode ocultos. Intente copiar todo el texto del documento en una instancia nueva del bloc de notas. Borre el contenido del archivo original y guárdelo ... si la longitud del archivo es> 0, hay algo mal.

Elimine el archivo y guarde su instancia de bloc de notas sobre la versión anterior. Todos los errores desaparecieron para mí.

Me ha pasado esto un par de veces en mi solución. No estoy seguro de qué lo está causando, pero sospecho que Resharper se está equivocando cuando comienza a tragarse grandes trozos de memoria en el abismo.

¿Soy el único que tiene una relación de amor / odio con Resharper?

usuario910531
fuente
0

Esto puede deberse a que tiene varios proyectos en su solución que no todos tienen como objetivo la misma versión de .NET Framework. Por ejemplo, si su proyecto de aplicación web tiene como destino .NET 4.5 y tiene una referencia de ensamblado a otro proyecto en la solución que tiene como destino .NET 4.5.2. Para solucionar este problema, debe cambiar sus proyectos para que todos tengan como objetivo la misma versión de .NET Framework.

Chris Pietschmann
fuente
0

Si ninguna de las respuestas funciona, utilice esta. ¡Me enfrenté al mismo problema! En realidad, el archivo configuration.cs en la carpeta de migraciones faltaba o se eliminaba. Eliminé la carpeta de migraciones y también eliminé la tabla de migraciones de la base de datos. A continuación, en Package Manager Console (PM) se utilizan los siguientes comandos:

Enable-Migrations -Force
Add-Migration Initial
update-database

Este proceso recreó el archivo configuration.cs y ¡todo funcionó perfectamente!

Shah Aadil
fuente
0

Verifique las propiedades de su proyecto para obtener el marco de destino. Resolví este problema en mi proyecto haciendo coincidir mi marco de destino .NET framework 4.6.1 MVC 5.2.3 fue la solución adecuada. Obtuve esa versión MVC de NuGet.

Sukesh Mullassery
fuente
0

En mi caso, la solución fue mover ConnectionString dentro de Web.Config. Esta declaración debe estar después de la sección AppSettings.

Rogerio Picilli
fuente
0

Hice TODO lo anterior y, al final, descubrí que lo que me resuelve (en un sitio .net framework 4.7.1 con MVC 5.2.4) fue agregar esto a la raíz web.config dentro de <compilation>-

<assemblies>
  <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
Andy
fuente