¿Por qué me aparece ‘Uno o más tipos necesarios para comstackr una expresión dinámica no se pueden encontrar’?

Tenía un proyecto que actualicé desde

  • .NET 3.5 MVC v2 a
  • .NET 4.0 MVC v3

Comstackción Obtengo un error cuando bash usar o establecer la propiedad @ViewBag.Title .

Uno o más tipos necesarios para comstackr una expresión dinámica no se pueden encontrar. ¿Le faltan referencias a Microsoft.CSharp.dll y System.Core.dll?

He hecho lo siguiente

  1. Siguió los pasos de actualización
  2. Establezca el marco de destino en la pestaña Proyecto / Propiedades / Aplicación a .NET Framwework 4
  3. Se agregó el marco System.Core manualmente
  4. Se agregó el marco Microsoft.CSharp
  5. Se agregó el marco System.Xml
  6. Se agregó el marco System.Xml.Linq
  7. Me aseguré de que mi Web.Config sea ​​correcta (está escrita por Web.Debug.Config, etc.)
  8. Creó el modelo , el controlador y una Razor View
  9. Crea un __Layout.cshtml_

Estoy perdido en cuanto a qué más hacer?

EDITAR:

Noté en el GAC Gui que hay System.Core 3.5.0.0 pero no System.Core 4.0.0.0. ¿Esto significa que se está confundiendo y todavía está usando la versión anterior? ¿O estoy malinterpretando el GAC?

EDITAR:

Mi web.config se ve de la siguiente manera

 ...               ....                 .... 

Por lo que vale, cuando esto me sucedió (en un proyecto convertido automáticamente de MVC2 a MVC3), todo lo que tenía que hacer era agregar una referencia de proyecto a Microsoft.CSharp. En mi caso el web.config ya tenía las 4.0 referencias mencionadas aquí, asumo cortesía del script de actualización.

Bien, lo tengo trabajando con los siguientes pasos.

  1. En el archivo de configuración, cambié a en la sección system.web
  2. En el archivo de configuración cambié a en la sección de comstackdores
  3. En Global.asax.cs, agregué ViewEngines.Engines.Add(new RazorViewEngine()); al método Application_Start()

y creo que eso fue todo.

Tienes que agregar una referencia para la versión de Microsoft.CSharp.dll – v4.0.30319 al proyecto. Que está disponible en C: \ Program Files \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0 \ Microsoft.CSharp.dll, después de incluir VS 2010

Para mí, la solución fue agregar:

 ViewEngines.Engines.Add(new RazorViewEngine()); 

al método Application_Start() en global.asax.cs .

Parece que está importando System.Core 3.5 en su web.config. Debe importar System.Core desde el marco de trabajo 4.0, porque ViewBag requiere el espacio de nombres System.Dynamic.

En mi máquina, parece System.Core v4.0.30319

Lo resolví de la siguiente manera:

Primero noté el uso de gacutil (Global Assembly Cache Utility) que contenía dos referencias a System.Core, una a la versión 4.0 y una a la versión 3.5. Aparentemente dentro de las vistas de la maquinilla de afeitar, incluso si en el proyecto tenía la referencia correcta a la versión 4.0, todavía estaba usando la versión 3.5 y es por eso que recibí el error sobre los tipos dynamics. Para comprobar si ese es su caso, abra como administrador el símbolo del sistema de Visual Studio y ejecute:

 gacutil -l System.Core 

Para eliminar la referencia a la versión anterior de System.Core, hice los siguientes pasos:

 - cd %systemroot%\assembly\ 

Desde aquí puede tener más de un directorio “gac”, por lo que tendrá que buscar dentro de cada uno para encontrar su componente. Para mí, estaba dentro del directorio “gac_MSIL”.

 - cd gac_msil - cd System.Core - cd __ - erase *.* Say "y" to are you sure. - cd .. - rd __ - cd .. - rd System.Core 

Ahora abrí mi solución de nuevo en Visual Studio y el error desapareció, se refiere correctamente a System.Core 4.0 y ya no estoy recibiendo los errores dynamics 🙂

Espero que te ayude también, Best, N.

Esta fue mi resolución:

1) Ir a Referencias del proyecto

2) Haga clic derecho en Microsoft.CSharp -> Propiedades

3) Cambia Copiar local a Falso si lo tienes en Verdadero.

Si ve ese mensaje en sus vistas MVC, necesita agregar una referencia en Views \ web.config como esta:

      (... other references ...)  < -- Add this (...)    

No te olvides de hacer una comstackción, de lo contrario los cambios no tendrán efecto.

Un proyecto predeterminado en Visual Studio 2010 debe tener referencias a Microsoft.CSharp y System.Core.

Si no se les hace referencia en su proyecto, debe agregarlos y los errores desaparecerán.

Woow!

Llego casi un año tarde, pero sigo pensando que debería responder en función de mis hallazgos (el 13 de julio de 2013 a las 7:15 p.m. PST) relacionados con el mensaje de error. Esto podría ser útil para los tipos que están buscando la respuesta al mensaje de error:

 "One or more types required to compile a dynamic expression cannot be found." 

así que por favor sigue leyendo: tuve el mensaje de error similar cuando implementé System.Dynamic en mi código. La aplicación web funciona sin problemas ya que tenía la configuración correcta en web.config (marco de destino) pero cuando puse app_code en un archivo DLL separado, comenzó a lanzar errores en tiempo de comstackción. Tenga en cuenta que no tenía app.config en mi dll, por lo que NO puede depender de la configuración cuando lo tenga en un proyecto dll independiente, sino la referencia al dll correcto.

Pensé que Microsoft.CSharp.dll correcto estaba en "C:\Windows\Microsoft.NET\Framework\v4.0.30319" y mi dll compiló correctamente.

Para mí no funcionó lo anterior, en su lugar estableciendo Copy Local = True resolvió el problema

Tuve este problema cuando actualicé la versión de MVC en mi proyecto. El problema era la directiva assemblyBinding, de alguna manera Nuget se olvidó de actualizarlo.

Tuve que cambiar

      

a

      

Recibí este error para una aplicación de Windows mientras usaba Microsoft.Office.Interop.Excel; …… las versiones en tiempo de ejecución no parecen ser compatibles entre una o más DLL.

MI SOLUCIÓN: Convertí toda mi solución de .NET 4.0 a .NET 3.5

por el placer de hacerlo, volví a 4.0 y empecé a recibir el error nuevamente.

basado en esto para su error, intente convertir su solución a un marco .NET anterior que podría funcionar.

========== EDITAR =================

2 horas más tarde termino algunas cosas clave en mi clase de interoperabilidad Excell y funciona como un encanto … por alguna razón solo en .NET 3.5 y no 4.0 mi solución es válida hasta este punto

Ninguno de los anteriores funcionó para mí. Con más búsqueda y buscando a través de la configuración de Web.Config, encontré esta respuesta funcionó para mí.

¿Cómo soluciono el error IIS “compilerVersion”?

Me sucedió algo muy similar, aunque en mi caso había actualizado varias cosas, desde Visual Studio 2010 hasta Visual Studio 2012. Seguí todas las sugerencias anteriores y todavía sufría. Al final, decidí volver a crear todo el proyecto. Fue solo cuando intenté volver a agregar los aspectos del proveedor de membresía a mi archivo web.config que de repente se hizo obvio dónde estaba el choque de versiones para mí.

       

Aunque mirándolo ahora, es obvio. El tipo para el proveedor tiene una versión específica. Luego, simplemente eliminé la versión y encontré el tipo apropiado. Por lo tanto, la resolución en mi caso fue reemplazar lo anterior por:

       

Y luego volver a comstackr. ¡Me ha llevado días encontrar esto, ya que estaba buscando en todos los lugares equivocados!

Probé todas las otras sugerencias en este archivo y ninguna funcionó en mi solución MVC 4 existente. Así que después de actualizar mi VS2012 a WebTools 2013.1 para VS 2012 , creé un nuevo proyecto de MVC 5 y usé los archivos del nuevo proyecto como base, eliminé todas las líneas extrañas de todos mis archivos web.config.

Después de hacer eso, todos mis errores de comstackción y advertencias desaparecieron y Intellisense comenzó a funcionar correctamente. Al eliminar completamente la sección en el archivo web.config principal finalmente se corrigió el ViewBag.Title (y otros) errores de expresión dinámica.

Como descubrí recientemente, algunas extensiones también pueden causar esto. En mi caso, la eliminación de la extensión AutoHistory 1.0.1 me la arregló (MVC5).

Una causa común de este problema es que no ha actualizado una versión de Assembly en su archivo Views/web.config . Es bastante fácil para mí en por ejemplo:

  

He estado luchando con este problema también durante un día más o menos. Después de que finalmente encontré este artículo aquí y probé todas las sugerencias aquí, encontré otra solución que me solucionó el problema:

Es justo lo contrario que Arman Bimatov ha encontrado:

1) Ir a Referencias del proyecto

2) Haga clic derecho en Microsoft.CSharp -> Propiedades

3) Cambie la Copia Local a Verdadero si lo tiene en Falso.

Creo que debe tratar de alguna manera con las asambleas registradas en GAC y la forma en que Visual Studio obtiene la versión “correcta”. Supongo que en mi máquina de desarrollo de alguna manera el .NET Framework 3.5 se instaló después de los Frameworks más nuevos (si esto es posible), por lo que Visual Studio obtiene la versión incorrecta de GAC. O simplemente, no está claro para VS para obtener la versión, por lo que se necesita la versión anterior …

Si todavía tiene el mismo mensaje de error, también puede intentar configurar el Copy Local en True para System.Core Dll y verifique que funciona ahora.

Saludos SkippingAdi

He estado luchando con este problema durante días y finalmente lo descubrí.

Todo lo que hice fue eliminar lo siguiente del web.config:

         

Empiezo a recibir el mismo error después de instalar el paquete MVCSiteMapProvider para hacer migas de pan para mi sitio.

Si ha instalado MVCSiteMapProvider y obtiene este error, debe reemplazar @ViewBag.Title por otra cosa, por ejemplo, @Html.MvcSiteMap().SiteMapTitle()