it-swarm.com.de

Datei oder Assembly System.Web.Http.WebHost konnte nach der Veröffentlichung auf der Azure-Website nicht geladen werden

Ich habe ein Webprojekt erstellt und es läuft gut in Visual Studio. Ich habe jedoch die folgende Fehlermeldung erhalten, nachdem ich sie auf azurewebsites veröffentlicht habe. Was kann das Problem verursachen?

Datei oder Assembly 'System.Web.Http.WebHost, Konnte nicht geladen werden. Version = 5.0.0.0, Kultur = neutral, PublicKeyToken = 31bf3856ad364e35 'oder eine seiner Abhängigkeiten. Die Manifestdefinition der gefundenen Assembly stimmt nicht mit der Assembly-Referenz überein. (Ausnahme von HRESULT: 0x80131040)

Beschreibung: Während der Ausführung von .__ ist eine nicht behandelte Ausnahme aufgetreten. die aktuelle Webanfrage. Bitte überprüfen Sie die Stack-Ablaufverfolgung auf weitere Informationen über den Fehler und den Ursprung des Codes. 

Ausnahmedetails: System.IO.FileLoadException: Datei oder .__ konnte nicht geladen werden. Assembly 'System.Web.Http.WebHost, Version = 5.0.0.0, Kultur = neutral, PublicKeyToken = 31bf3856ad364e35 'oder eine seiner Abhängigkeiten. Das Die Manifestdefinition der lokalisierten Assembly stimmt nicht mit der Assembly überein Referenz. (Ausnahme von HRESULT: 0x80131040)

Quellfehler: 

Eine unbehandelte Ausnahme wurde während der Ausführung von .__ generiert. aktuelle Webanfrage. Informationen zu Herkunft und Ort von Die Ausnahme kann anhand der unten aufgeführten Ausnahme-Stack-Ablaufverfolgung identifiziert werden.

Assembly Load Trace: Die folgenden Informationen können hilfreich für .__ sein. Ermitteln Sie, warum die Assembly 'System.Web.Http.WebHost, Version = 5.0.0.0, Kultur = neutral, PublicKeyToken = 31bf3856ad364e35 'konnte nicht geladen werden.

WRN: Die Protokollierung der Assembly-Bindung ist deaktiviert. So aktivieren Sie die Assembly-Bindung Fehlerprotokollierung, legen Sie den Registrierungswert .__ fest. [HKLM\Software\Microsoft\Fusion! EnableLog] (DWORD) auf 1. Hinweis: Dort ist ein Leistungsnachteil, der mit einem Assembly-Bindungsfehler verbunden ist Protokollierung Entfernen Sie den Registrierungswert .__, um diese Funktion zu deaktivieren. [HKLM\Software\Microsoft\Fusion! EnableLog].

Folgendes 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>
133
ca9163d9

Die dll fehlt in der veröffentlichten (implementierten Umgebung). Aus diesem Grund arbeitet es im lokalen Modus, d. H. In Visual Studio, jedoch nicht in der Azure-Website-Umgebung.

Machen Sie einfach Copy Local = true in den Eigenschaften für die Assembly ( System.Web.Http.WebHost ) und führen Sie dann eine erneute Implementierung durch, es sollte einwandfrei funktionieren. 

Wenn Sie einen ähnlichen Fehler erhalten, d. H. Eine andere Assembly fehlt, machen Sie die Assembly auf copylocal = true und setzen Sie sie erneut ein. Wiederholen Sie diesen Schritt iterativ, wenn Sie sich nicht sicher sind, welche Abhängigkeiten bestehen.

128
Naveen Vijay

Wenn Sie immer noch nach einer Antwort suchen, überprüfen Sie diesen Frage-Thread . Es half mir, ein ähnliches Problem zu lösen.

edit: Die Lösung, die mir geholfen hat, war, Update-Package Microsoft.AspNet.WebApi -reinstall aus dem NugGet-Paketmanager auszuführen, wie von Pathoschild vorgeschlagen. Ich musste dann meine .suo-Datei löschen und VS neu starten, wie von Sergey Osypchuk in this vorgeschlagen Faden .

84
amraby

Ich traf das gleiche Problem und löste es, indem ich CopyLocal für die folgenden Bibliotheken auf "true" setzte:

System.Web.Http.dll
System.Web.Http.WebHost.dll
System.Net.Http.Formatting.dll

Ich muss hinzufügen, dass ich MVC4 und NET 4 verwende

53
Bronek

Für mich funktionierte das Hinzufügen des folgenden Abschnitts zu web.config-Datei:

<configuration>
...
    <runtime>
    ...
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Http.WebHost" publicKeyToken="31bf3856ad364e35" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
        </dependentAssembly>
    ...
    </runtime>
...
</configuration>

Dieses Beispiel steht für MVC 5.1. Ich hoffe, es hilft jemandem, dieses Problem zu lösen.

33
Eadel

Für mich begann es zu funktionieren, nachdem in den Veröffentlichungsoptionen für Dateien unter Einstellungen im Veröffentlichungsdialog "Zusätzliche Dateien am Zielort entfernen" ausgewählt wurde.

13
Magnus Ahlin

Die DLL fehlt in der veröffentlichten (bereitgestellten Umgebung). Aus diesem Grund arbeitet es im lokalen Modus, d. H. In Visual Studio, jedoch nicht in der Azure-Website-Umgebung.

Führen Sie einfach Local = true in den Eigenschaften für die Assembly (System.Web.Http.WebHost) aus und führen Sie dann eine erneute Implementierung durch.

10
venkat

Ich verwende vs2012 und ich denke, das Update KB2781514 hat einige Einstellungen geändert. Mein gesamtes System.Web.Http in meinem MVC4-Projekt wurde in false geändert, und ich habe diese Nachricht erhalten. Ich hatte das All file in this project in der Publish-Eigenschaft geändert, aber es funktioniert nicht. Schließlich muss ich Copy Local = true nach und nach ändern und dieses Problem lösen.

6
thanh

Ich habe den gleichen Fehler und habe meine Version von 4 auf 3 geändert und es wurde behoben:

<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
    <!-- Ensure correct version of MVC -->
    <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
    </dependentAssembly>
</assemblyBinding>
2
Ilaria

Ich hatte das gleiche Problem in meiner Bewerbung.

System.web.http.webhost not found.

Sie müssen lediglich die system.web.http.webhost-Datei aus Ihrem Hauptprojekt, das Sie in Visual Studio ausführen, kopieren und in das veröffentlichte Projektverzeichnis bin einfügen. 

Danach kann derselbe Fehler angezeigt werden, der Verzeichnisname wurde jedoch geändert und kann system.web.http sein. Befolgen Sie dasselbe Verfahren wie oben. Es funktioniert, nachdem alle Dateien hochgeladen wurden. Aufgrund des Nuget-Pakets in Visual Studio werden sie zwar aus dem Internet heruntergeladen, können jedoch auf dem Server nicht heruntergeladen werden.

Sie finden diese Datei in Ihrem Projektverzeichnis bin.

2
imran khan

Dies ist mir auf VS2013 (Update 5) /ASP.NET 4.5 unter dem Projekttyp "Web Application" einschließlich MVC und Web API 2 passiert. Der Fehler trat direkt nach dem Erstellen des Projekts und vor dem Hinzufügen von Code auf. Das Hinzufügen der folgenden Konfiguration korrigiert es für mich. Nachdem "System.Web.Helpers" behoben wurde, wurden zwei weitere ähnliche Fehler für "System.Web.Mvc" und "System.Web.WebPages" angezeigt.

<runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
1
Masoud Safi

Wenn sich in Ihrer Lösung mehrere Projekte befinden 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 die Datei "System.Web.Http" hilft nicht, Sie müssen das richtige Nuget-Paket in diesem Projekt installieren.

Ich hatte mehrere Projekte in meiner Lösung und WebApi Core war bereits in einem anderen Projekt installiert. Ich habe auf die System.Web.Http-Assembly verwiesen, indem Sie mit der rechten Maustaste auf die Assembly geklickt und die Assembly in der Liste angekreuzt haben. In Azure funktionierte sie jedoch nicht, obwohl sie lokal erstellt werden konnte. Ich musste die manuelle Referenz entfernen und das WebApi Core-Nuget-Paket zu jedem Projekt hinzufügen, für das die Assembly-Referenz benötigt wurde.

0
Ali

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 herabgestuft und aktualisiert und das Problem behoben.

0

Ich habe den folgenden Eintrag aus der web.config entfernt und es hat für mich funktioniert.

<dependentAssembly>
                <assemblyIdentity name="System.Web.Http.WebHost" culture="neutral" publicKeyToken="31BF3856AD364E35" />
                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="5.2.6.0" />
            </dependentAssembly>
0

Wenn "Copy Local" bereits "True" ist, finde ich es manchmal gut, wenn Sie die Dateien entfernen, in denen sie veröffentlicht wurden, und sie 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 ältere Versionen von Dateien am Ziel. Um sicherzustellen, dass Sie keine älteren Versionen verwenden, löschen Sie alle Dateien, bevor Sie sie erneut veröffentlichen.

0
Prasanth Louis

Mir fehlten einige DLLs. Selbst wenn ich sie bei der nächsten Veröffentlichung manuell in das Verzeichnis kopiert habe, würden sie verschwinden. Jeder war bereits in VS ..__ auf Lokal kopieren gesetzt. Die Behebung bestand für mich darauf, lokal lokal zu kopieren, zu speichern, zu erstellen und dann auf lokal zu kopieren. Dieses Mal, wenn ich alle DLLs veröffentlicht habe, die korrekt veröffentlicht wurden. Seltsam

0
Grayson