Impossibile caricare il file o l'assemblaggio System.Web.Http.WebHost dopo la pubblicazione nel sito Web di Azure


141

Ho creato un progetto Web e funziona bene in Visual Studio. Tuttavia, ho ricevuto il seguente errore dopo averlo pubblicato su azurewe website. Cosa può causare il problema?

Impossibile caricare il file o l'assembly 'System.Web.Http.WebHost, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' o una delle sue dipendenze. La definizione manifest dell'assembly individuato non corrisponde al riferimento dell'assembly. (Eccezione da HRESULT: 0x80131040)

Descrizione: si è verificata un'eccezione non gestita durante l'esecuzione della richiesta Web corrente. Esamina la traccia dello stack per ulteriori informazioni sull'errore e sulla sua origine nel codice.

Dettagli eccezione: System.IO.FileLoadException: impossibile caricare il file o l'assembly 'System.Web.Http.WebHost, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' o una delle sue dipendenze. La definizione manifest dell'assembly individuato non corrisponde al riferimento dell'assembly. (Eccezione da HRESULT: 0x80131040)

Errore sorgente:

È stata generata un'eccezione non gestita durante l'esecuzione della richiesta Web corrente. Le informazioni relative all'origine e alla posizione dell'eccezione possono essere identificate utilizzando la traccia dello stack delle eccezioni riportata di seguito.

Traccia di caricamento assembly: Le seguenti informazioni possono essere utili per determinare perché non è stato possibile caricare l'assembly 'System.Web.Http.WebHost, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'.

WRN: la registrazione dell'associazione dell'assieme è disattivata. Per abilitare la registrazione degli errori di bind di assembly, impostare il valore del registro [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD) su 1. Nota: è presente una penalità delle prestazioni associata alla registrazione degli errori di bind di assembly. Per disattivare questa funzione, rimuovere il valore di registro [HKLM \ Software \ Microsoft \ Fusion! EnableLog].

Quanto segue fa parte del file 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>

Risposte:


129

Il dllmanca nel (ambiente distribuito) pubblicato. Questo è il motivo per cui funziona in locale, ad esempio Visual Studio, ma non nell'ambiente del sito Web di Azure.

Esegui semplicemente Copy Local = truele proprietà dell'assembly ( System.Web.Http.WebHost ) e quindi esegui una ridistribuzione, dovrebbe funzionare correttamente.

Se viene visualizzato l'errore simile, ad esempio se manca qualche altro assembly, quindi rendere tale assembly in copylocal = true e ridistribuire, ripeterlo ripetutamente - se non si è sicuri delle sue dipendenze.


2
Il Copy Localè già vero. Stranamente mostra che Runtime Versionè v4.0.30319 invece di v5?
ca9163d9,

4
Sai cosa è successo qui? Ho corso bene per 18 mesi quando questo è balzato in piedi e mi ha morso.
Glenn Gordon,

2
Questo ha risolto il problema per me Grazie! Ma mi sembra strano che dobbiamo includere librerie di framework nei nostri progetti (nel mio caso non Azure ma un server IIS). Qualcuno sa se si tratta di eseguire alcuni aggiornamenti, quindi non dobbiamo più includerli?
edgarpetrauskas,

1
Mini componente aggiuntivo poiché mi ci è voluta un'eternità per trovare copia locale: In VS2013, apri il nodo "riferimenti" nel progetto e fai clic con il pulsante destro del mouse -> proprietà sulla libreria su cui vuoi impostare "copia locale".
ArtHare,

6
Se Copia locale è già impostato su vero e non è possibile aggiornare WebApi a causa delle dipendenze, esiste il trucco per impostare Copia locale su falso, compilare, quindi impostare Copia locale nuovamente su vero e compilare. Non so perché funzioni.
DeeArgee,

90

Se stai ancora cercando una risposta, prova a controllare questa discussione . Mi ha aiutato a risolvere un problema simile.

modifica: La soluzione che mi ha aiutato era l'esecuzione Update-Package Microsoft.AspNet.WebApi -reinstalldal gestore dei pacchetti NugGet, come suggerito da Pathoschild. Ho quindi dovuto eliminare il mio file .suo e riavviare VS, come suggerito da Sergey Osypchuk in questo thread .


Si prega di evitare il collegamento solo risposte .. piuttosto si prega di pubblicare informazioni rilevanti dal link qui sopra ..
Anvesh Yalamarthy,

3
L'esecuzione del comando Update-Package ha risolto il problema, mentre nessuno degli altri suggerimenti ha funzionato. Grazie per la risposta!
DigiOz Multimedia

La migliore soluzione al problema.
Festim Cahani,

Risposta perfetta, grazie!
Apolo,

3
Questa soluzione ha funzionato anche per me. Sono abbastanza sicuro che ciò sia stato causato dalla funzionalità "Rimuovi assiemi non utilizzati" di ReSharper. Rimuovi assiemi inutilizzati a volte rimuove ciecamente assiemi senza controllare il contenuto del pacchetto NuGet.
Joe King,

54

Ho riscontrato lo stesso problema e l'ho risolto impostando CopyLocalsu true per le seguenti librerie:

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

Devo aggiungere che utilizzo MVC4 e NET 4


grazie questo è stato utile. Sai perché questi file non dovrebbero essere solo in GAC? È perché siti diversi potrebbero utilizzare framework dotnet diversi ecc.?
dellyjm

Come ricordo questo problema si è verificato da quando Microsoft ha applicato correzioni critiche in quella zona (suppongo in System.Web / ASP NET / MVC). Immagino che questi spazi dei nomi non siano in GAC (quindi non in assembly NET nativi) ma in percorsi separati di Visual Studio o MVC.
Bronek,

Questo ha risolto il problema sul mio VPS (questo non è solo un problema azzurrato)
Evilripper

Questo ha funzionato per me (anche se non sto usando Azure). Stavo spostando un progetto da un ambiente framework .net 4.5 a uno 4.0 e ho riscontrato questo problema alla fine di tutto.
TheQ

1
Come suggerito da DeeArgee sopra, ho già avuto COPIA LOCALE = vero per tutte e 3 queste dll. Ma questo suggerimento ha finalmente risolto il problema: "Se Copia locale è già impostato su true, esiste il trucco per impostare Copia locale su false, build, quindi impostare Copia Local su true e build. Non so perché funzioni. - DeeArgee, 19 novembre 15 alle 17:16
Debbie,

34

Per me ha lavorato aggiungendo la seguente sezione al web.configfile:

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

Questo esempio sta per MVC 5.1. Spero che possa aiutare qualcuno a risolvere questo problema.


2
sei fantastico. ha funzionato come un fascino in mvc5. Grazie
David Graça,

2
Grazie, ha lavorato anche per me +1, la persona che ha posto questa domanda dovrebbe contrassegnarla come risposta!
Ray

O semplicemente aggiungi il Microsoft.AspNet.WebApi.WebHostpacchetto tramite nuget.
Optimax,

15

Per me ha iniziato a funzionare dopo aver selezionato "Rimuovi file aggiuntivi a destinazione" in Opzioni di pubblicazione dei file in Impostazioni nella finestra di dialogo di pubblicazione.


Ha funzionato per me! Ben fatto.
Dr Schizo,

Questa è l'unica soluzione qui che ha funzionato per me. Immagino che ci fosse qualche altra vecchia versione di una dll che ha fatto scattare le cose. Grazie!
Ohad Schneider,

10

La dll è mancante nell'ambiente pubblicato (distribuito). Questo è il motivo per cui funziona in locale, ad esempio Visual Studio, ma non nell'ambiente del sito Web di Azure.

Basta copiare Local = true nelle proprietà dell'assembly (System.Web.Http.WebHost) e quindi eseguire una ridistribuzione, dovrebbe funzionare correttamente.


lo stesso qui, questo è esattamente ciò che era necessario.
pabloelustondo,

1
Probabilmente perché è la stessa soluzione descritta in molte altre risposte un anno prima.
Chad,

6

Sto usando vs2012 e penso che l'aggiornamento KB2781514 abbia cambiato alcune impostazioni. Tutto il mio System.Web.Http nel mio progetto MVC4 è cambiato in false e continuo a ricevere questo messaggio. Avevo cambiato la All file in this projectproprietà in pubblicazione ma non funziona. Alla fine devo cambiare Copy Local = trueuno per uno e ho risolto questo problema.


2

Ho avuto lo stesso errore e ho cambiato la mia versione da 4 a 3 ed è stato risolto:

<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

Ho avuto lo stesso problema nella mia applicazione.

System.web.http.webhost not found.

Devi solo copiare il system.web.http.webhostfile dal tuo progetto principale che esegui in Visual Studio e incollarlo nella bindirectory del progetto pubblicato .

Dopodiché potrebbe mostrare lo stesso errore ma il nome della directory è cambiato potrebbe essere system.web.http. Seguire la stessa procedura di cui sopra. Funzionerà dopo aver caricato tutti i file. Ciò a causa del pacchetto nuget in Visual Studio che scaricano da Internet ma sul server non è in grado di scaricarlo.

È possibile trovare questo file nella bindirectory del progetto .


1

Questo è successo a me su VS2013 (Aggiornamento 5) / ASP.NET 4.5, nel tipo di progetto "Applicazione Web" che include MVC e API Web 2. Si è verificato un errore subito dopo aver creato il progetto e prima di aggiungere qualsiasi codice. Aggiungendo la seguente configurazione, risolvilo per me. Dopo aver risolto "System.Web.Helpers" emettere altri due errori simili emersi per "System.Web.Mvc" e "System.Web.WebPages".

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

0

Mi mancavano diverse DLL. Anche se li avessi copiati manualmente nella directory la prossima volta che avrei pubblicato sarebbero scomparsi. Ognuno era già impostato su Copia localmente in VS. La soluzione per me era impostare ognuno su Copia localmente falso, salvare, costruire quindi impostare ognuno su Copia localmente vero. Questa volta, quando ho pubblicato tutte le DLL pubblicate correttamente. Strano


0

Se hai più progetti nella tua soluzione e uno dei tuoi progetti non riesce a realizzarsi a causa di questo errore, assicurati di aver installato il pacchetto nuget WebApi Core in quel progetto. La semplice aggiunta di un riferimento a System.Web.Http non aiuta, è necessario installare il pacchetto nuget corretto in quel progetto.

Avevo diversi progetti nella mia soluzione e WebApi Core era già installato in un altro progetto. Ho fatto riferimento all'assembly System.Web.Http facendo clic con il pulsante destro del mouse e spuntando l'assembly dall'elenco e non funzionava su Azure, anche se localmente sarebbe stato compilato correttamente. Ho dovuto rimuovere il riferimento manuale e aggiungere il pacchetto nuget WebApi Core a ogni progetto che necessitava del riferimento di assieme.


0

Nel caso in cui "Copia locale" sia già True, a volte trovo che funzioni se rimuovi i file in cui è stato pubblicato e lo pubblichi di nuovo.

Ad esempio, se si utilizza IIS, rimuovere i siti Web e i contenuti della directory in cui sono pubblicati e pubblicare nuovamente.

Potrebbero esserci versioni precedenti di file nella destinazione, quindi per assicurarti di non utilizzare versioni precedenti, elimina tutto prima di pubblicarlo di nuovo.


0

Ho rimosso la seguente voce da web.config e ha funzionato per me.

<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

Assicurarsi che la versione del pacchetto sia uguale in tutta la soluzione. Ho appena eseguito il downgrade e l'aggiornamento del Microsoft.AspNet.Mvcpacchetto attraverso la soluzione e il problema è stato risolto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.