Impossibile caricare il file o l'assembly "System.Web.Http 4.0.0 dopo l'aggiornamento dal 2012 al 2013


183

Ho fatto l'aggiornamento secondo. http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and- web-api-2

Ottengo l'errore. Qualcun altro ha questo errore?

Errore del server nell'applicazione '/'

Impossibile caricare il file o l'assembly 'System.Web.Http, Version = 4.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. Esaminare 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, Version = 4.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:

Riga 48: Riga 49: Riga 50:} Riga 51: Riga 52: void protetto Application_BeginRequest (mittente oggetto, EventArgs e)

File di origine: d: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ Global.asax.cs Riga: 50

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

=== Informazioni sullo stato pre-bind === LOG: DisplayName = System.Web.Http, versione = 4.0.0.0, Cultura = neutro, PublicKeyToken = 31bf3856ad364e35 (Completamente specificato) LOG: Appbase = file: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/ LOG: PrivatePath iniziale = D: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ bin Assemblaggio chiamante: ThirdPartyWebAPI, Versione = 1.0.0.0, Cultura = neutro, PublicKeyToken = null. === LOG: questo collegamento inizia nel contesto di caricamento predefinito. LOG: Utilizzo del file di configurazione dell'applicazione: D: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ web.config LOG: Utilizzo del file di configurazione host: C: \ Users \ michalc \ Documents \ IISExpress \ config \ aspnet.config LOG: Utilizzo della configurazione della macchina file da C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config. LOG: riferimento post-politica: System.Web.Http, versione = 4.0.0.0, cultura = neutro, PublicKeyToken = 31bf3856ad364e35 LOG: tentativo di download del nuovo file URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http.DLL. LOG: tentativo di scaricare il nuovo file URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http .DLL. LOG: tentativo di download del nuovo file URL: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL. WRN: il confronto del nome dell'assembly ha provocato una mancata corrispondenza: ERR versione principale: impossibile completare l'installazione dell'assembly (hr = 0x80131040). Probing terminato. Tentativo di download del nuovo file URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http.DLL . LOG: tentativo di download del nuovo file URL: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL. WRN: il confronto del nome dell'assembly ha provocato una mancata corrispondenza: ERR versione principale: impossibile completare l'installazione dell'assembly (hr = 0x80131040). Probing terminato. Tentativo di download del nuovo file URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http.DLL . LOG: tentativo di download del nuovo file URL: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL. WRN: il confronto del nome dell'assembly ha provocato una mancata corrispondenza: ERR versione principale: impossibile completare l'installazione dell'assembly (hr = 0x80131040). Probing terminato. Impossibile completare l'installazione dell'assembly (hr = 0x80131040). Probing terminato. Impossibile completare l'installazione dell'assembly (hr = 0x80131040). Probing terminato.

Stack Trace:

[FileLoadException: impossibile caricare il file o l'assembly 'System.Web.Http, Version = 4.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)] ThirdPartyWebAPI.WebApiApplication.Application_Start () in d: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ Global.asax.cs: 50

[HttpException (0x80004005): Impossibile caricare il file o l'assembly 'System.Web.Http, Version = 4.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)]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (contesto HttpContext, app HttpApplication
) +9935033
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS .InitSpecial (stato HttpApplicationState, gestori MethodInfo [], intPtr appContext, contesto HttpContext) +172
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, contesto HttpContext) +336
System.Web.Hosting.PipelineRuntime.InitializeApplication (IntPtr appContext) +296

[HttpException (0x80004005): Impossibile caricare il file o l'assembly 'System.Web.Http, Version = 4.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)]
System.Web.HttpRuntime.FirstRequestInit (contesto HttpContext) +9913572 System.Web.HttpRuntime.EnsureFirstRequestInit (contesto HttpContext) +101 System.Web.HttpRuntime.ProcessRequest4XISivate


Informazioni sulla versione: Versione di Microsoft .NET Framework: 4.0.30319; Versione ASP.NET: 4.0.30319.18408


hai provato ad aggiungere nuovamente il riferimento a "System.Web.Http"
Izikon il

4
Si prega di contrassegnare la risposta come accettata.
Aliostad,

Risposte:


288

Ho risolto questo problema reinstallando il pacchetto NuGet , che corregge le dipendenze interrotte. Dal gestore pacchetti, eseguire:

Update-Package Microsoft.AspNet.WebApi -reinstall

1
L'esecuzione dell'app Web in locale era adatta a me (F5), ma durante la distribuzione sul server remoto (con WebDeploy) gli assembly non venivano copiati sul server. Non ero sicuro se gli assemblaggi avrebbero dovuto essere copiati o meno. Comunque, dopo aver eseguito questo comando, tutti gli assembly richiesti sono stati contrassegnati con copy-local = true e dopo aver distribuito l'app ha iniziato a funzionare correttamente
Guillermo Ruffino,

3
Solo per aggiungere un'immagine più equilibrata - questo non ha risolto il problema per me.
Lewray,

2
Assicurati di aggiungere l'aggiornamento necessario a tutti i progetti dipendenti come test, ecc.
DeeArgee,

L'ho fatto e ha apportato troppe modifiche, ma ho notato che ha modificato i reindirizzamenti di associazione nel web.config, ho scartato tutte le altre modifiche apportate e questo ha funzionato per me.
Myster

ora sto ricevendo un nuovo errore: la nuova versione è Versione = 5.2.3.0 e si aspetta Versione = 4.0.0.0
Yar

84

Per risolvere l'errore Impossibile caricare il file o l'assemblaggio "System.Web.Http", utilizzare NuGet per installare l'API Web 2.1 WebHost.

In Esplora soluzioni nei riferimenti fare clic con il pulsante destro del mouse e selezionare Gestisci pacchetti nuget. (se non c'è installare nuget)

inserisci qui la descrizione dell'immagine

Nella finestra Gestisci pacchetti NuGet sul lato sinistro fare clic online, quindi in alto a destra cercare l'host Web e installare l'host Web dell'API 2.1 dell'API Web Microsoft ASP.NET. (Una volta installato il pulsante di installazione diventerà un segno di spunta verde)

Dopodiché il progetto verrà ricaricato e, una volta ricostruito, l'errore verrà risolto e il progetto eseguirà il debug e l'esecuzione. L'errore sparirà e potresti essere 'Impossibile trovare la risorsa. Basta aggiungere l'URL (es. Da localhost: 52088 / a localhost: 52088api / prodotti)

La tua domanda è stata buona e mi ha aiutato.

Spero che questa risposta aiuti!


Grazie Catto, mi ha guarito molto.
Saurabh Soni,

61

È necessario aggiungere reindirizzamenti di assembly:

<configuration>

   ....

   <runtime>
      <assemblyBinding>
    <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      </assemblyBinding>
   </runtime>

   ...

</configuration>

Molto probabilmente devi farlo per qualche altro assemblaggio come web hosting, ecc.


Ho modificato la risposta. Per qualche ragione il nome DLL è stato cambiato in Castle Windsor System.Web.Http.
Aliostad,

7
Non si dovrebbero mai aggiungere reindirizzamenti binari senza assicurarsi che il nuovo assembly sia binario compatibile con quello precedente.
GETah

18

Oppure puoi farlo dalla console NuGet Package Manager

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

E quindi sarai in grado di aggiungere il riferimento a System.Web.Http.WebHost 5.0


lavora per me, installa Install-Package Microsoft.AspNet.WebApi
Djama

17

Quando ho installato Web Api 2.2, questo errore è iniziato. Ho aggiunto questo al web.config e risolto il mio problema.

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

1
Lo stesso qui su un progetto che era Web Api 2.2 dall'inizio, durante la pubblicazione in Azure. Il progetto ha funzionato bene localmente, ma su Azure ho ricevuto l'errore dall'OP. L'aggiunta di queste righe a web.config e la ripubblicazione in Azure lo hanno risolto.
AronVanAmmers

4

Ho semplicemente impostato Copy Local = truel'assemblaggio mancante e ha funzionato. Questo ovviamente accade facendo clic con il tasto destro del mouse sul riferimento mancante (che è indicato nel messaggio di errore) e selezionando le proprietà; come sotto:

inserisci qui la descrizione dell'immagine

Questo dovrebbe quindi risolvere un problema in quanto potrebbe esserci più di un assembly che causa il problema - quello che ho fatto è stato selezionare tutti gli assembly e fare clic con il tasto destro su di essi; proprietà selezionate; e impostali tutti su Copia locale = vero; e quindi ripubblicare.


1
Ha funzionato perfettamente. Ho dovuto solo fare "Copia Local = true" su System.Web.Http e System.Net.Http.Formatting
Sandip Subedi

4

La soluzione corretta per risolvere questo problema è seguire i passaggi

. Aggiorna Visual Studio se hai una versione precedente alla 15.5.4 (Opzionale)

  1. Rimuovere tutti i reindirizzamenti di associazione da web.config

  2. Aggiungi questo al file csproj:

 <PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
  1. Costruire.

  2. Nella cartella bin, dovrebbe esserci un (WebAppName).dll.configfile.

  3. Dovrebbe avere reindirizzamenti in esso. Copia questi nel web.config

  4. Rimuovi di nuovo il frammento sopra dal file csproj

  5. Dovrebbe funzionare

Detailed Blog


non crea tutti gli attacchi
batmaci

3

Per me è stato solo un arresto anomalo con questo errore in un ambiente di produzione, non su una macchina locale; ciò che è stato risolto è stato eliminare il contenuto della cartella / bin e quindi rigenerarlo di nuovo.


Questo è qualcosa che la gente dovrebbe controllare. Stavo avendo lo stesso problema. Si è scoperto che c'era una dll non necessaria per Microsoft.AspNet.Cors nel front-end della mia app. Ho avuto la cartella bin eliminata sui sistemi di prod, ripubblicato il sito e magia.
Ron

2

Solo un suggerimento ovvio ma possibile utile .... ricordarsi di verificare che la nuova versione specificata nell'associazione dell'assieme webconfig sia la stessa versione a cui si fa riferimento nei riferimenti del progetto. (cioè mentre scrivo questo ... questo sarebbe 5.1.0.0 se di recente hai fatto un NUGet su System.Web.Http


2
 Installing NuGet package ASP.NET.MVC solved the issue for me. 
 To install package.
 - Right click on project 
 - Select "Manage NuGet Packages"
 - Select Online->Nuget.org from left menu
 - select "Microsoft ASP.NET MVC"
 - Click Install

 If you have already installed package earlier, please update the package by selecting Updates from left menu and then selecting "Microsoft ASP.NET" and click Update.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


2

Questo potrebbe aiutare qualcuno.

Ho deciso di andare con l'app MVC4.

eseguire il progetto, ha funzionato

Quindi sono stati installati alcuni pacchetti come,
ASP.NET WEB API 2.2 (4 pacchetti) di
Microsoft ASP.NET WEB API 2.2 Help Page
Microsoft ASP.NET WEB API 2.2 OWIN

eseguire il progetto, stesso errore menzionato nella domanda

Soluzione:

In web.config

 <dependentAssembly>
      <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
 </dependentAssembly>


Problema risolto


ma poi, è stato trovato un errore di aggiornamento rapido , per risolverlo, vai alla cartella VISUALIZZA del tuo progetto MVC4, trova il file second web.config e ha cambiato la versione da 2.0.0.0 a 3.0.0.0 come mostrato di seguito.


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


2

Nel mio caso, in realtà mi mancava del web.configtutto, che aveva i reindirizzamenti vincolanti appropriati. Ripristino web.configdell'errore risolto.


2

Ho potuto risolvere un problema simile con System.Net.HTTP aggiungendo il riferimento dell'assembly in app.config dell'applicazione principale.

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.1.1" newVersion="4.0.0.0" />
      </dependentAssembly></runtime>

1

Ho trovato la soluzione! Eliminare la cartella denominata pacchetto nella directory del progetto e quindi ricostruirla per eseguirla.


1
<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>

1

SÌ!!!

Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

Funziona bene nel mio caso .... grazie


2
Questo è solo un duplicato di una risposta esistente . A quanto pare non hai altro da aggiungere, ti preghiamo di considerare di rimuoverlo.
zzzzBov,

1

Io non ho fatto nulla, ho solo copiato le DLL delle cartelle Bin di sviluppo nella cartella Bin distribuita online e ha funzionato bene per me.


0

Come altri hanno già detto, reinstalla il pacchetto MVC sul tuo progetto web usando nuget, ma assicurati di aggiungere il pacchetto MVC a tutti i progetti a seconda del progetto web, come i test unitari. Se costruisci ogni progetto incluso individualmente, vedrai che quelli stregoni richiedono l'aggiornamento.


0

Ho avuto lo stesso problema e reinstallare il pacchetto non funziona.

La mia applicazione viene eseguita in LocalIIS (non IIS EXPRESS). Abilito Assembly Load Trace e scopro che desidera caricare System.Web.Http da sotto il temp temp. quindi rimuovere tutte le cartelle di cattura in esso.

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ File ASP.NET temporanei [la mia applicazione]


0

Ho risolto questo problema ripristinando le modifiche che Nuget aveva apportato al mio web.configdopo l'esecuzione nuget. Ripristina le modifiche a una versione funzionante precedente.

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
  </dependentAssembly>

0

Ciò che ha risolto il problema per me è stata la reinstallazione della pagina della Guida dell'API Web ASP.NET Microsoft 2.2 e dei pacchetti OWIN dell'API Web Microsoft ASP.NET 2.2 . Ho reinstallato entrambi allo stesso tempo, ma penso che sia stato il primo a risolvere il problema.

Ho provato le prime soluzioni offerte qui, ma ciò non ha aiutato, quindi ho confrontato le mie dipendenze con quelle di un progetto che ha funzionato (da un corso su Pluralsight) e le due dipendenze sopra erano una versione inferiore (5.0.0 ), quindi li ho aggiornati alla 5.2.3 e ha iniziato a funzionare.


0

Ho avuto questo da un servizio WCF. Per quanto mi riguarda (poiché il problema era visualizzato nello sviluppatore locale), dovevo semplicemente eliminare il contenuto della cartella bin sotto la soluzione. La ricostruzione funziona bene ancora una volta.


0

Versione ASP.NET: 4.0.30319.18408 appartiene a .Net4.5 e System.Web.Http Version = 4.0.0.0 è compatibile con .NET4.0. Quindi le versioni che hai non sono compatibili. È necessario aggiornare System.Web.Http alla versione 5.0.0.0, che è compatibile con .Net4.5


0

Ho avuto un problema simile. Tutto funzionava prima. È stato originariamente realizzato utilizzando i moduli Web e in seguito ha aggiunto API Web per alcune cose.

  • Ho provato a disinstallare, installare e reinstallare il pacchetto Microsoft.AspNet.WebApi.
  • Ho provato a rimuovere la cartella dei pacchetti dalla soluzione e a consentire il ripristino di NuGet in VS.
  • Ho provato a rimuovere i singoli riferimenti di assieme (sotto Riferimenti) e reinstallare i pacchetti.
  • Ho provato ad aggiungere reindirizzamenti vincolanti alla versione 5.2.3.0 in web.config menzionata in diverse risposte. Niente ha funzionato per me.

Ciò che ha funzionato è stato, in Visual Studio, modificare le impostazioni del profilo di pubblicazione da Release a Debug. Strano, ma è quello che ha funzionato. Quindi condividendo qui.


0

Ho riscontrato questo problema durante la distribuzione in Azure usando la funzionalità Pubblica. Ricorda di cancellare i file a destinazione.

Publish Settings -> File Publish Options drop down -> Check Remove additional files at destination

Ciò ha risolto il mio problema, nel caso in cui le persone debbano cercare in questo modo come ho fatto io. Tutto era la stessa versione nel mio progetto / soluzione, ma non nella destinazione in cui stavo distribuendo.


0

Se si utilizzano più progetti su una soluzione e si chiama il metodo in un progetto a un altro progetto, assicurarsi che tutti i progetti (chiamati progetto e progetto chiamante) utilizzino la 'System.Net.Http'versione univoca .


0

Modificare il flag Versione specifica da true a false per la dll nel riferimento


0

Ho avuto lo stesso problema con System.Web.Http.WebHost, versione = 5.2.6.0 a cui si fa riferimento ma l'ultimo pacchetto NuGet era 5.2.7.0. Ho modificato i file web.config, reinstallato il pacchetto NuGet, quindi modificato i file di progetto di Visual Studio per tutti i miei progetti per assicurarmi che non esistessero riferimenti a 5.2.6.0. Anche dopo tutto questo, il problema persisteva.

Quindi ho cercato nella cartella bin il progetto che stava generando l'eccezione, dove ho trovato una DLL per uno dei miei altri progetti che non è una dipendenza e non avrebbe mai dovuto essere lì. Ho eliminato la DLL offensiva (che era stata compilata utilizzando la versione 5.2.6.0 di System.Web.Http.WebHost), ho ricostruito il progetto problematico e ora funziona.

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.