web-dev-qa-db-fra.com

Erreur Viewbag.Title: un ou plusieurs types nécessaires à la compilation d'une expression dynamique sont introuvables. Il vous manque une référence?

J'ai une application Web ASP.NET MVC 5. Dans chaque fichier de vue .cshtml, l'erreur suivante apparaît pour Viewbag : Un ou plusieurs types nécessaires à la compilation d'une expression dynamique sont introuvables. Il vous manque une référence?

J'ai des références à Microsoft.CSharp.dll et System.Core.dll.

Voici mon fichier racine web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="DefaultConnection" connectionString="***" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    <add key="RouteDebugger:Disabled" value="true" />
  </appSettings>
  <system.web>
    <authentication mode="None" />
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <globalization culture="ro-RO" uiCulture="ro" />
  </system.web>
  <system.webServer>
    <modules>
      <remove name="FormsAuthenticationModule" />
    </modules>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.AspNet.Identity.Core" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.AspNet.Identity.EntityFramework" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.3.0.0" newVersion="3.3.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

Voici le fichier web.config du dossier Vues:

<?xml version="1.0"?>

<configuration>
    <configSections>
        <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <section name="Host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
            <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
        </sectionGroup>
    </configSections>

    <system.web.webPages.razor>
        <Host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <pages pageBaseType="System.Web.Mvc.WebViewPage">
            <namespaces>
                <add namespace="System.Web.Mvc" />
                <add namespace="System.Web.Mvc.Ajax" />
                <add namespace="System.Web.Mvc.Html" />
                <add namespace="System.Web.Optimization"/>
                <add namespace="System.Web.Routing" />
            </namespaces>
        </pages>
    </system.web.webPages.razor>

    <appSettings>
        <add key="webpages:Enabled" value="false" />
    </appSettings>

    <system.webServer>
        <handlers>
            <remove name="BlockViewHandler"/>
            <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
        </handlers>
    </system.webServer>
</configuration>

Je peux construire la solution et l'application Web fonctionne comme prévu, mais cette erreur persiste dans le IDE et elle est très agaçante. J'ai passé toute la journée à essayer de résoudre ce problème. Quelqu'un peut-il s'il vous plaît me dire comment y remédier?

Modifier:

Lorsque tout fonctionne bien, lorsque je navigue vers la définition (F12) du ViewBag, j'obtiens le Assembly System.Web.Mvc.dll, v5.1.0.0 à partir de Recipes.Web\Bin\System.Web.Mvc.dll et il y a 4 instructions using, dont l'une est System.Runtime.CompilerServices.

Lorsque l'erreur apparaît, lorsque je navigue vers la définition (F12) du ViewBag, j'obtiens le même Assembly System.Web.Mvc.dll, v5.1.0.0 depuis Recipes.Web\Bin\System.Web.Mvc.dll, MAIS il n'y a que 3 instructions d'utilisation, System.Runtime.CompilerServices est parti.

Parfois, l'erreur n'apparaît pas, mais si je ferme la solution et que Visual Studio rouvre ensuite la solution, l'erreur réapparaît. Je ne reconstruis même pas ou ne fais rien d'autre.

Pourquoi cela arrive-t-il?

11
Marius Stănescu

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

Sinon, ce qui a fonctionné pour moi:

  1. dans root web config ont ajouté la référence recommandée pour corriger l’assemblage en tant qu’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>

  2. définir les propriétés de copie local = true pour System.Core et Microsoft.CSharp

17
algor77

Pour la référence Microsoft.CSharp, modifiez la valeur de la propriété Copy Local de False à True.

11
Marlos

J'espère que cela aidera quelqu'un. Fonctionne pour moi dans VS 2013 avec asp.net MVC 5 et .NET 4.6.1

La lecture Microsoft.CSharp n'a pas résolu le problème. De plus, l'ajout de System.Core à system.web/compilation/assemblies/ à web.config n'a pas corrigé.

J'ai surmonté cela uniquement en ajoutant System.Web.Mvc à system.web/compilation/assemblies/ section:

<compilation debug="true" targetFramework="4.6.1">
  <assemblies>
      <add Assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </assemblies>
</compilation>

Reconstruit la solution et la ligne rouge a disparu.

1
Mikhail Neofitov

Cela m'est arrivé après que j'ai apporté un changement de code sur la page cshtml avec une erreur de syntaxe. Après avoir corrigé l'erreur de syntaxe, les erreurs ont persisté. Alors, j'ai fermé le cshtml et re-compilé ... succès. J'ai rouvert le cshtml et les erreurs n'étaient plus là. 

1
jaybro

Ajoutez ce qui suit à la méthode Application_Start () dans global.asax

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

0