61 votes

Pourquoi est-ce que je reçois le message "Un ou plusieurs types nécessaires à la compilation d'une expression dynamique sont introuvables".

J'avais un projet que j'ai mis à jour à partir de

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

La compilation j'ai une erreur quand j'essaie d'utiliser ou de régler l' @ViewBag.Title de la propriété.

Un ou plusieurs des types requis pour compiler une expression dynamique ne peut pas être trouvé. Êtes-vous manque des références à Microsoft.CSharp.dll et System.Core.dll?

J'ai fait ce qui suit

  1. Suivi les étapes de mise à niveau
  2. Définir la cible dans le cadre du Projet/Propriétés/onglet Application à l' .NET Framwework 4
  3. Ajoutée le Système.Core cadre manuellement
  4. Ajouté le Microsoft.CSharp cadre
  5. Ajouté le System.Xml cadre
  6. Ajoutée le Système.Xml.Linq cadre
  7. Fait sûr de mon Web.Config est correcte (c'est écrit sur le Web.Debug.Config, etc)
  8. Créé le modèle, contrôleur et un Rasoir Vue
  9. Créer un _Mise en page.cshtml

Je suis à une perte pour quoi faire?

EDIT:

Je remarque que dans le GAC Gui il y a le Système.Core 3.5.0.0 mais aucun Système.Base de 4.0.0.0. Est-ce à dire que de se confondre et est toujours à l'aide de la version précédente? Ou suis-je malentendu le GAC?

EDIT:

Mon web.config ressemble comme suit

...
<compilation debug="true">
    <assemblies>
        <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
    </assemblies>
</compilation>
....
<pages>
    <controls>
    <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</controls>
<namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.WebPages"/>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
    <add namespace="System.Linq" />
    <add namespace="System.Collections.Generic" />
</namespaces>
</pages>
....

63voto

centralscru Points 1886

Pour ce que ça vaut, quand cela m'est arrivé (dans un projet converti automatiquement de MVC2 en MVC3), tout ce que j'avais à faire était d'ajouter une référence de projet à Microsoft.CSharp. Dans mon cas, web.config avait déjà les références 4.0 mentionnées ici, je suppose par courtoisie du script de mise à niveau.

49voto

Lango Points 1043

Okay je l'ai eu avec les étapes suivantes.

  1. Dans le fichier de configuration, j'ai changé <compilation debug="true"> en <compilation debug="true" targetFramework="4.0"> dans la section system.web
  2. Dans le fichier de configuration, j'ai changé <providerOption name="CompilerVersion" value="v3.5" /> en <providerOption name="CompilerVersion" value="v4.0" /> dans la section Compilers
  3. Dans Global.asax.cs, j’ai ajouté ViewEngines.Engines.Add(new RazorViewEngine()); à la méthode Application_Start()

et je pense que c'était ça.

34voto

Sagar Biswas Points 211

Vous devez ajouter une référence pour la version Microsoft.CSharp.dll - v4.0.30319 au projet. Qui est disponible dans C: \ Program Files \ Assemblys de référence \ Microsoft \ Framework \ .NETFramework \ v4.0 \ Microsoft.CSharp.dll, après avoir affiché VS 2010

12voto

Patrick Neborg Points 81

Pour moi, la solution consistait à ajouter:

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

à l' Application_Start() méthode en global.asax.cs .

7voto

Chris Shain Points 33569

On dirait que vous importez System.Core 3.5 dans votre web.config. Vous devez importer System.Core à partir de la structure 4.0, car ViewBag requiert l’espace de noms System.Dynamic.

Sur ma machine, cela ressemble à System.Core v4.0.30319

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X