Ich habe ein Webprojekt erstellt und es läuft gut in Visual Studio. Ich habe jedoch den folgenden Fehler erhalten, nachdem ich ihn auf azurewebsites veröffentlicht habe. Was kann das Problem verursachen?
Datei oder Assembly 'System.Web.Http.WebHost, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Die Manifestdefinition der gefundenen Assembly stimmt nicht mit der Assemblyreferenz überein. (Ausnahme von HRESULT: 0x80131040)
Beschreibung: Während der Ausführung der aktuellen Webanforderung ist eine nicht behandelte Ausnahme aufgetreten. Bitte überprüfen Sie die Stapelverfolgung, um weitere Informationen über den Fehler und dessen Ursprung im Code zu erhalten.
Ausnahmedetails: System.IO.FileLoadException: Datei oder Assembly 'System.Web.Http.WebHost, Version = 5.0.0.0, Kultur = neutral, PublicKeyToken = 31bf3856ad364e35' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Die Manifestdefinition der gefundenen Assembly stimmt nicht mit der Assemblyreferenz überein. (Ausnahme von HRESULT: 0x80131040)
Quellfehler:
Während der Ausführung der aktuellen Webanforderung wurde eine nicht behandelte Ausnahme generiert. Informationen zum Ursprung und Ort der Ausnahme können mithilfe der folgenden Ausnahmestapelverfolgung identifiziert werden.
Assembly Load Trace: Die folgenden Informationen können hilfreich sein, um festzustellen, warum die Assembly 'System.Web.Http.WebHost, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' nicht geladen werden konnte.
WRN: Die Protokollierung der Baugruppenbindung ist deaktiviert. Setzen Sie den Registrierungswert [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD) auf 1, um die Protokollierung von Assemblybindungsfehlern zu aktivieren. Hinweis: Mit der Protokollierung von Assemblybindungsfehlern sind einige Leistungseinbußen verbunden. Entfernen Sie den Registrierungswert [HKLM \ Software \ Microsoft \ Fusion! EnableLog], um diese Funktion zu deaktivieren.
Das Folgende ist Teil der Datei web.config.
<system.web>
<customErrors mode="Off"/>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<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" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers></system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Copy Local
ist schon wahr. Seltsamerweise zeigtRuntime Version
es, dass v4.0.30319 statt v5 ist?Wenn Sie immer noch nach einer Antwort suchen, überprüfen Sie diesen Fragenthread . Es hat mir geholfen, ein ähnliches Problem zu lösen.
Bearbeiten: Die Lösung, die mir geholfen hat, war die Ausführung
Update-Package Microsoft.AspNet.WebApi -reinstall
über den NugGet-Paketmanager, wie von Pathoschild vorgeschlagen. Ich musste dann meine .suo-Datei löschen und VS neu starten, wie von Sergey Osypchuk in diesem Thread vorgeschlagen .quelle
Ich bin auf dasselbe Problem gestoßen und habe es behoben, indem ich
CopyLocal
für die folgenden Bibliotheken auf true gesetzt habe:Ich muss hinzufügen, dass ich MVC4 und NET 4 verwende
quelle
Für mich hat das Hinzufügen des folgenden Abschnitts zur
web.config
Datei gearbeitet:Dieses Beispiel steht für MVC 5.1. Hoffe, es wird jemandem helfen, ein solches Problem zu lösen.
quelle
Microsoft.AspNet.WebApi.WebHost
Paket über Nuget hinzu.Für mich fing es an zu funktionieren, nachdem ich in den Veröffentlichungsoptionen für Dateien unter Einstellungen im Veröffentlichungsdialog "Zusätzliche Dateien am Zielort entfernen" ausgewählt hatte.
quelle
Die DLL fehlt in der veröffentlichten (bereitgestellten Umgebung). Dies ist der Grund, warum es im lokalen, dh Visual Studio, aber nicht in der Azure-Website-Umgebung funktioniert.
Kopieren Sie einfach Local = true in den Eigenschaften für die Assembly (System.Web.Http.WebHost) und führen Sie dann eine erneute Bereitstellung durch. Dies sollte einwandfrei funktionieren.
quelle
Ich verwende vs2012 und ich denke, das Update KB2781514 hat einige Einstellungen geändert. Alle meine System.Web.Http in meinem MVC4-Projekt wurden in false geändert und ich habe diese Nachricht weiterhin erhalten. Ich hatte die
All file in this project
Eigenschaft "In Publish" geändert , aber sie funktioniert nicht. Schließlich muss ichCopy Local = true
eins nach dem anderen ändern und dieses Problem lösen.quelle
Ich habe den gleichen Fehler erhalten und meine Version von 4 auf 3 geändert und es ist behoben:
quelle
Ich hatte das gleiche Problem in meiner Bewerbung.
Sie müssen nur die
system.web.http.webhost
Datei aus Ihrem Hauptprojekt kopieren, das Sie in Visual Studio ausführen, und sie in Ihr veröffentlichtes Projektverzeichnis einfügenbin
.Danach wird möglicherweise derselbe Fehler angezeigt, aber der Verzeichnisname wird möglicherweise geändert
system.web.http
. Gehen Sie wie oben beschrieben vor. Es funktioniert, nachdem alle Dateien hochgeladen wurden. Dies liegt an dem Nuget-Paket in Visual Studio, das sie aus dem Internet herunterladen, aber auf dem Server nicht herunterladen können.Sie finden diese Datei in Ihrem Projektverzeichnis
bin
.quelle
Dies ist mir unter VS2013 (Update 5) / ASP.NET 4.5 unter dem Projekttyp "Webanwendung" passiert, der MVC und Web-API 2 enthält. Der Fehler trat direkt nach dem Erstellen des Projekts und vor dem Hinzufügen von Code auf. Das Hinzufügen der folgenden Konfiguration behebt das Problem für mich. Nach dem Beheben von "System.Web.Helpers" sind zwei weitere ähnliche Fehler für "System.Web.Mvc" und "System.Web.WebPages" aufgetreten.
quelle
Mir fehlten mehrere DLLs. Selbst wenn ich sie bei der nächsten Veröffentlichung manuell in das Verzeichnis kopieren würde, würden sie verschwinden. Jeder war bereits so eingestellt, dass er in VS lokal kopiert. Die Lösung für mich bestand darin, jedes auf Lokal falsch kopieren, speichern, erstellen und dann auf lokal wahr setzen zu setzen. Diesmal habe ich alle DLLs korrekt veröffentlicht. Seltsam
quelle
Wenn Ihre Lösung mehrere Projekte enthält und eines Ihrer Projekte aufgrund dieses Fehlers nicht erstellt werden kann, stellen Sie sicher, dass Sie das WebApi Core-Nuget-Paket in diesem Projekt installiert haben. Das Hinzufügen eines Verweises auf System.Web.Http hilft nicht weiter. Sie müssen das richtige Nuget-Paket in diesem Projekt installieren.
Ich hatte mehrere Projekte in meiner Lösung und WebApi Core wurde bereits in einem anderen Projekt installiert. Ich habe auf die System.Web.Http-Assembly verwiesen, indem ich mit der rechten Maustaste auf die Assembly in der Liste geklickt und sie angekreuzt habe. In Azure funktionierte sie nicht, obwohl sie lokal in Ordnung wäre. Ich musste die manuelle Referenz entfernen und das WebApi Core Nuget-Paket zu jedem Projekt hinzufügen, das die Assemblyreferenz benötigte.
quelle
Wenn "Lokal kopieren" bereits "Wahr" ist, funktioniert es manchmal, wenn Sie die Dateien entfernen, in denen es veröffentlicht wurde, und erneut veröffentlichen.
Wenn Sie beispielsweise IIS verwenden, entfernen Sie die Websites und den Inhalt des Verzeichnisses, in dem sie veröffentlicht werden, und veröffentlichen Sie sie erneut.
Möglicherweise befinden sich am Zielort ältere Versionen von Dateien. Um sicherzustellen, dass Sie keine älteren Versionen verwenden, löschen Sie alles, bevor Sie erneut veröffentlichen.
quelle
Ich habe den folgenden Eintrag aus web.config entfernt und es hat bei mir funktioniert.
quelle
Stellen Sie sicher, dass die Paketversion für die gesamte Lösung gleich ist. Ich habe gerade das
Microsoft.AspNet.Mvc
Paket für die gesamte Lösung heruntergestuft und aktualisiert und das Problem gelöst.quelle