23 votes

Erreur ViewBag.Title

En travaillant avec la RC2 actuelle - le modèle qui est généré Razor vues comprend :

@{
    ViewBag.Title = "Details1";
    Layout = "/Views/Shared/_Public.cshtml";

}

Avec une tache rouge sous ViewBag.Title et cette erreur de compilation :'.

Error   4   One or more types required to compile a dynamic expression cannot be found. Are you missing references to Microsoft.CSharp.dll and System.Core.dll? c:\Visual Studio 2010\Projects\myProj\Views\Webinar\Details1.cshtml 6   2   TTSTrain.Webinars.WebEntry

Mais le projet se construit et fonctionne correctement. Cette erreur est-elle révélatrice d'autres problèmes qui devraient être résolus ?

16voto

Peter Points 5678

J'ai eu le même problème après avoir retiré le targetFramework de l'attribut <compilation> dans le fichier Web.config.

Une fois que je l'ai restauré à

<compilation debug="true" targetFramework="4.0">

Tout fonctionne à nouveau parfaitement !

9voto

Kaiser Points 130

Je l'ai résolu de la manière suivante :

J'ai d'abord remarqué en utilisant gacutil (Global Assembly Cache Utility) qu'il contenait deux références à System.Core, une à la version 4.0 et une à la version 3.5. Apparemment, dans les vues razor, même si dans le projet j'avais la référence correcte à la version 4.0, il utilisait toujours la version 3.5 et c'est pourquoi j'ai eu l'erreur sur les types dynamiques. Pour vérifier si c'est votre cas, ouvrez en tant qu'administrateur l'invite de commande de Visual Studio et exécutez :

gacutil -l System.Core

Pour supprimer la référence à l'ancienne version de System.Core, j'ai procédé comme suit :

- cd %systemroot%\assembly\

A partir de là, vous pouvez avoir plus d'un répertoire "gac", vous devrez donc chercher dans chacun d'eux pour trouver votre composant. Pour moi, il se trouvait dans le répertoire "gac_MSIL".

- cd gac_msil
- cd System.Core
- cd <assembly version number>__<public key token>
- erase *.* Say "y" to are you sure.
- cd ..
- rd <assembly version number>__<public key token>
- cd ..
- rd System.Core

Après cela, j'ai rouvert ma solution dans Visual Studio et l'erreur avait disparu, elle se référait correctement à System.Core 4.0 et je n'obtenais plus d'erreurs dynamiques :)

J'espère que cela vous aidera aussi, Best, N.

4voto

Jeremy Holovacs Points 6879

Comme pour la réponse de @Kaiser, j'ai rencontré ce problème parce que j'avais plusieurs sites Web. System.Core dans le GAC.

J'ai choisi de ne pas supprimer l'assemblage 3.5, cependant. Au lieu de cela, dans le web.config de Views, j'ai modifié l'élément configuration/system.web/compilation comme suit :

<compilation debug="true" targetFramework="4.0">
    <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.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=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </assemblies>
</compilation>

La ligne importante est la dernière assembly : il indique au compilateur Razor la version de l'assemblage GAC à utiliser.

Une fois que j'ai fait cela, tout était bien dans mes vues du rasoir.

2voto

algor77 Points 81

Je n'ai pas ce problème lorsque j'exécute VS 2012 en tant qu'administrateur.

Sinon, ce qui a marché pour moi :

dans le Root web config, j'ai ajouté une référence recommandée à l'assemblage correct comme enfant du noeud de compilation.

<system.web>
    <compilation debug="true" targetFramework="4.5">
        <assemblies>
            <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        </assemblies>
    </compilation>
</system.web>

Définir les propriétés de copie locale = true pour System.Core et Microsoft.CSharp`.

1voto

marcind Points 38002

Avez-vous une référence à Microsoft.CSharp y System.Core ?

Les vues MVC sont (généralement) compilées dynamiquement lorsque vous accédez à votre site, et non lorsque vous compilez l'application dans VS. J'imagine que vous rencontrerez des problèmes lors de l'exécution du site. Ajoutez simplement les deux références et tout devrait bien se passer.

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