web-dev-qa-db-de.com

Viewbag.Title-Fehler: Ein oder mehrere Typen, die zum Kompilieren eines dynamischen Ausdrucks erforderlich sind, wurden nicht gefunden. Vermissen Sie eine Referenz?

Ich habe eine ASP.NET MVC 5-Webanwendung. In jeder .cshtml-Ansichtsdatei wird der folgende Fehler für Viewbag : angezeigt. Ein oder mehrere Typen, die zum Kompilieren eines dynamischen Ausdrucks erforderlich sind, können nicht gefunden werden. Vermissen Sie eine Referenz?

Ich habe Verweise auf Microsoft.CSharp.dll und System.Core.dll.

Hier ist meine root-Datei 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>

Hier ist die web.config aus dem Ordner Views:

<?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>

Ich kann die Lösung erstellen und die Webanwendung funktioniert wie erwartet, aber ich erhalte diesen Fehler immer wieder in der IDE und es ist sehr ärgerlich. Ich habe den ganzen Tag versucht, dieses Problem zu lösen. Kann mir bitte jemand sagen, wie ich das Problem beheben kann?

Bearbeiten:

Wenn alles gut funktioniert und ich zur Definition (F12) des ViewBag navigiere, erhalte ich den Assembly System.Web.Mvc.dll, v5.1.0.0 von Recipes.Web\Bin\System.Web.Mvc.dll und es gibt 4 using-Anweisungen, von denen eine System.Runtime.CompilerServices ist.

Wenn der Fehler auftritt und ich zur Definition (F12) des ViewBag navigiere, erhalte ich denselben Assembly System.Web.Mvc.dll, v5.1.0.0 von Recipes.Web\Bin\System.Web.Mvc.dll, ABER es gibt nur 3 using-Anweisungen, System.Runtime.CompilerServices ist weg.

Manchmal wird der Fehler nicht angezeigt. Wenn ich die Projektmappe schließe und Visual Studio die Projektmappe dann erneut öffne, wird der Fehler erneut angezeigt. Ich baue nicht einmal um oder mache nichts anderes.

Warum passiert dies?

11

Ich habe dieses Problem nicht, wenn Sie VS 2012 als Administrator ausführen.

Ansonsten was für mich funktioniert hat:

  1. in root web config hat als empfohlene Referenz zur korrekten Assembly als untergeordnetes Element des Kompilierungsknotens <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. setze local = true-Eigenschaften der Kopie für System.Core und Microsoft.CSharp

17
algor77

Ändern Sie als Referenz Microsoft.CSharp den Wert der Eigenschaft Copy Local von False in True.

11
Marlos

Ich hoffe das hilft jemandem. Funktioniert für mich in VS 2013 mit asp.net MVC 5 und .NET 4.6.1

Readding Microsoft.CSharp hat das Problem nicht behoben. Auch das Hinzufügen von System.Core zu system.web/compilation/assemblies/ in web.config wurde nicht korrigiert.

Ich überwand dies nur durch das Hinzufügen von System.Web.Mvc zu system.web/compilation/assemblies/ Abschnitt:

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

Die Lösung wurde neu aufgebaut, und die rote Linie verschwand.

1

Dies ist mir passiert, nachdem ich auf der cshtml-Seite eine Codeänderung mit einem Syntaxfehler vorgenommen hatte. Nach dem Korrigieren des Syntaxfehlers blieben die Fehler bestehen. Also habe ich die cshtml geschlossen und neu kompiliert ... Erfolg. Ich öffnete die cshtml wieder und die Fehler waren nicht mehr vorhanden. 

1
jaybro

Fügen Sie der Application_Start () - Methode in global.asax Folgendes hinzu

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

0