Impossible de charger le fichier ou l'assembly 'System.Web.Http 4.0.0 après la mise à jour de 2012 à 2013

183

J'ai fait la mise à niveau selon. 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

J'obtiens l'erreur. Est-ce que quelqu'un d'autre a cette erreur?

Erreur serveur dans l'application '/'

Impossible de charger le fichier ou l'assembly 'System.Web.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' ou l'une de ses dépendances. La définition de manifeste de l'assembly localisé ne correspond pas à la référence d'assembly. (Exception de HRESULT: 0x80131040)
Description: une exception non gérée s'est produite lors de l'exécution de la requête Web actuelle. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.IO.FileLoadException: impossible de charger le fichier ou l'assembly 'System.Web.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' ou l'une de ses dépendances. La définition de manifeste de l'assembly localisé ne correspond pas à la référence d'assembly. (Exception de HRESULT: 0x80131040)

Erreur source:

Ligne 48: Ligne 49: Ligne 50:} Ligne 51: Ligne 52: protected void Application_BeginRequest (expéditeur de l'objet, EventArgs e)

Fichier source: d: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ Global.asax.cs Ligne: 50

Suivi du chargement de l'assembly: les informations suivantes peuvent être utiles pour déterminer pourquoi l'assembly 'System.Web.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' n'a pas pu être chargé.

=== Informations sur l'état de pré-liaison === LOG: DisplayName = System.Web.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 (entièrement spécifié) LOG: Appbase = file: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/ LOG: Initial PrivatePath = D: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ bin Assemblage d'appel: ThirdPartyWebAPI, Version = 1.0.0.0, Culture = neutre, PublicKeyToken = null. === LOG: Cette liaison démarre dans le contexte de chargement par défaut. LOG: Utilisation du fichier de configuration de l'application: D: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ web.config LOG: Utilisation du fichier de configuration de l'hôte: C: \ Users \ michalc \ Documents \ IISExpress \ config \ aspnet.config LOG: Utilisation de la configuration de la machine fichier à partir de C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config. LOG: Référence post-stratégie: System.Web.Http, Version = 4.0.0.0, Culture = neutre, PublicKeyToken = 31bf3856ad364e35 LOG: Tentative de téléchargement du nouveau fichier URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http.DLL. LOG: Tentative de téléchargement du nouveau fichier URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http .DLL. LOG: Tentative de téléchargement du nouveau fichier URL: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL. WRN: la comparaison du nom d'assembly a entraîné l'incohérence: Version principale ERR: échec de la configuration de l'assembly (hr = 0x80131040). Le sondage est terminé. Tentative de téléchargement du nouveau fichier URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http.DLL . LOG: Tentative de téléchargement du nouveau fichier URL: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL. WRN: la comparaison du nom d'assembly a entraîné l'incohérence: Version principale ERR: échec de la configuration de l'assembly (hr = 0x80131040). Le sondage est terminé. Tentative de téléchargement du nouveau fichier URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http.DLL . LOG: Tentative de téléchargement du nouveau fichier URL: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL. WRN: la comparaison du nom d'assembly a entraîné l'incohérence: Version principale ERR: échec de la configuration de l'assembly (hr = 0x80131040). Le sondage est terminé. Échec de la configuration de l'assemblage (hr = 0x80131040). Le sondage est terminé. Échec de la configuration de l'assemblage (hr = 0x80131040). Le sondage est terminé.

Trace de la pile:

[FileLoadException: impossible de charger le fichier ou l'assembly 'System.Web.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' ou l'une de ses dépendances. La définition de manifeste de l'assembly localisé ne correspond pas à la référence d'assembly. (Exception de HRESULT: 0x80131040)] ThirdPartyWebAPI.WebApiApplication.Application_Start () dans d: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ Global.asax.cs: 50

[HttpException (0x80004005): impossible de charger le fichier ou l'assembly 'System.Web.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' ou l'une de ses dépendances. La définition de manifeste de l'assembly localisé ne correspond pas à la référence d'assembly. (Exception de HRESULT: 0x80131040)]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (HttpContext contexte, HttpApplication app) 9935033
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr appContext, HttpContext contexte, MethodInfo [] Chariot) 118
System.Web.HttpApplication .InitSpecial (état HttpApplicationState, gestionnaires MethodInfo [], IntPtr appContext, contexte HttpContext) +172
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, contexte HttpContext) +336
System.Web.Hosting.PipelineRuntime.InitializeApplication (IntPtr appContext) +296

[HttpException (0x80004005): impossible de charger le fichier ou l'assembly 'System.Web.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' ou l'une de ses dépendances. La définition de manifeste de l'assembly localisé ne correspond pas à la référence d'assembly. (Exception de HRESULT: 0x80131040)]
System.Web.HttpRuntime.FirstRequestInit (contexte HttpContext) +9913572 System.Web.HttpRuntime.EnsureFirstRequestInit (contexte HttpContext) +101 System.Web.HttpPruntime.ProcessWeb.HttpRuntime.Process (Contexte HttpContext) +101 System.Web.HttpRuntestime.ProcessWeb.


Informations sur la version: Version de Microsoft .NET Framework: 4.0.30319; Version ASP.NET: 4.0.30319.18408

Michal Asaf Carmeli
la source
avez-vous essayé de rajouter la référence à 'System.Web.Http'
Izikon
4
Veuillez marquer la réponse comme acceptée.
Aliostad

Réponses:

288

J'ai résolu ce problème en réinstallant le package NuGet , qui corrige les dépendances brisées. Depuis le gestionnaire de packages, exécutez:

Update-Package Microsoft.AspNet.WebApi -reinstall
Pathoschild
la source
1
L'exécution de l'application Web localement me convenait (F5), mais lors du déploiement sur un serveur distant (avec WebDeploy), les assemblys n'étaient pas copiés sur le serveur. Je n'étais pas sûr si les assemblys auraient dû être copiés ou non. Quoi qu'il en soit, après avoir exécuté cette commande, tous les assemblys requis ont été marqués avec copy-local = true et après le déploiement de l'application, ils ont commencé à fonctionner correctement
Guillermo Ruffino
3
Juste pour ajouter une image plus équilibrée - cela n'a pas résolu le problème pour moi.
Lewray
2
Assurez-vous d'ajouter la mise à jour nécessaire à tous les projets dépendants tels que les tests, etc.
DeeArgee
J'ai fait cela et il a apporté trop de changements, mais j'ai remarqué qu'il avait ajusté les redirections de liaison dans le web.config, j'ai rejeté toutes les autres modifications apportées et cela a fonctionné pour moi.
Myster
maintenant, j'obtiens une nouvelle erreur: la nouvelle version est Version = 5.2.3.0 et elle attend Version = 4.0.0.0
Yar
84

Pour résoudre l'erreur Impossible de charger le fichier ou l'assembly 'System.Web.Http', utilisez NuGet pour installer l'API Web 2.1 WebHost.

Dans l'explorateur de solutions, dans les références, cliquez avec le bouton droit de la souris et sélectionnez gérer les packages nuget. (sinon, installez nuget)

entrez la description de l'image ici

Dans la fenêtre de gestion des packages NuGet sur le côté gauche, cliquez sur en ligne, puis en haut à droite, recherchez Web Host et installez Microsoft ASP.NET Web API 2.1 Web Host. (Une fois installé, le bouton d'installation deviendra une coche verte)

Après cela, le projet se rechargera et quand il sera reconstruit, l'erreur sera résolue et le projet déboguera et s'exécutera. L'erreur aura disparu et vous pourriez être «La ressource est introuvable. Ajoutez simplement l'url (ex de localhost: 52088 / à localhost: 52088api / products)

Votre question était bonne et m'a aidé.

J'espère que cette réponse vous aidera!

Catto
la source
Merci Catto, ça m'a beaucoup guéri.
Saurabh Soni
61

Vous devez ajouter des redirections d'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>

Vous devrez probablement le faire pour quelques assemblys supplémentaires comme l'hébergement Web, etc.

Aliostad
la source
J'ai édité la réponse. Pour une raison quelconque, le nom de la DLL a été remplacé par Castle Windsor System.Web.Http.
Aliostad
7
Vous ne devez jamais ajouter de redirections binaires sans vous assurer que le nouvel assembly est compatible binaire avec le précédent.
GETah le
18

Ou vous pouvez le faire à partir de NuGet Package Manager Console

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

Et puis vous pourrez ajouter la référence à System.Web.Http.WebHost 5.0

Sameer Alibhai
la source
travaille pour moi, il suffit d'installer Install-Package Microsoft.AspNet.WebApi
Djama
17

Lorsque j'ai installé l'aide Web Api 2.2, cette erreur a commencé. J'ai ajouté ceci au web.config et cela a résolu mon problème.

  <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>
jhilden
la source
1
Idem ici sur un projet qui était Web Api 2.2 depuis le début, lors de la publication sur Azure. Le projet a bien fonctionné localement, mais sur Azure, j'ai eu l'erreur de l'OP. L'ajout de ces lignes à web.config et la republication sur Azure ont résolu le problème.
AronVanAmmers
4

J'ai simplement mis Copy Local = truesur l'assemblage manquant et cela a fonctionné. Cela se produit bien sûr en faisant un clic droit sur la référence manquante (qui est indiquée dans le message d'erreur) et en sélectionnant les propriétés; comme ci-dessous:

entrez la description de l'image ici

Cela devrait alors résoudre un problème car il peut y avoir plus d'un assemblage à l'origine du problème - ce que j'ai fait est d'avoir sélectionné tous les assemblages et de faire un clic droit dessus; propriétés sélectionnées; et définissez-les tous sur Copy Local = true; puis republier.

t_plusplus
la source
1
A parfaitement fonctionné. Je n'avais qu'à faire "Copy Local = true" sur System.Web.Http et System.Net.Http.Formatting
Sandip Subedi
4

La solution appropriée pour résoudre ce problème consiste à suivre les étapes

. Mettez à jour Visual studio si vous avez une version plus ancienne vers 15.5.4 (facultatif)

  1. Supprimer toutes les redirections de liaison de web.config

  2. Ajoutez ceci au fichier csproj:

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

  2. Dans le dossier bin, il devrait y avoir un (WebAppName).dll.configfichier.

  3. Il devrait contenir des redirections. Copiez-les dans le web.config

  4. Supprimez à nouveau l'élément ci-dessus extrait du fichier csproj

  5. Ça devrait marcher

Detailed Blog

Sajeetharan
la source
il ne crée pas toutes les liaisons
batmaci
3

Pour moi, il ne plantait avec cette erreur que sur un environnement de production, pas sur une machine locale; ce qui a résolu c'était de supprimer le contenu du dossier / bin, puis de le régénérer à nouveau.

Oana
la source
C'est quelque chose que les gens devraient vérifier. J'avais le même problème. Il s'est avéré qu'il y avait une DLL inutile pour Microsoft.AspNet.Cors dans le front-end de mon application. J'ai fait supprimer le dossier bin sur les systèmes prod, republié le site et la magie.
Ron
2

Juste un conseil évident mais utile possible .... n'oubliez pas de vérifier que la nouvelle version que vous spécifiez dans votre liaison d'assembly webconfig est la même version que vous référencez dans vos références de projet. (c'est-à-dire au moment où j'écris ceci ... ce serait 5.1.0.0 si vous avez récemment fait un NUGet sur System.Web.Http

Jim Taliadoros
la source
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.

entrez la description de l'image ici

entrez la description de l'image ici

Arvind Krmar
la source
2

Cela pourrait aider quelqu'un.

J'ai décidé d'utiliser l'application MVC4.

exécuter un projet, travaillé

Puis installé quelques packages comme,
Microsoft ASP.NET WEB API 2.2 (4 packages)
Microsoft ASP.NET WEB API 2.2 Page d'aide
Microsoft ASP.NET WEB API 2.2 OWIN

exécuter le projet, même erreur que celle mentionnée en question

Solution:

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


Problème résolu


mais ensuite, une erreur de correctif a été trouvée.Pour la résoudre, accédez au dossier VIEW de votre projet MVC4, recherchez le fichier second web.config et la version modifiée de 2.0.0.0 à 3.0.0.0 comme indiqué ci-dessous.


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

micronyques
la source
2

Dans mon cas, je manquais web.configcomplètement mon , qui avait les redirections de liaison appropriées. La restauration du a web.configrésolu l'erreur.

Brandon Hawbaker
la source
2

Je pourrais résoudre un problème similaire avec System.Net.HTTP en ajoutant une référence d'assemblage dans app.config de l'application 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>
Parag Bangad
la source
1

J'ai trouvé la solution! Supprimez le dossier nommé package dans le répertoire du projet, puis reconstruisez-le pour l'exécuter.

Ashitosh birajdar
la source
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>
ravula sandeep
la source
1

OUI!!!

Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

Cela fonctionne bien dans mon cas .... thnkz

X-Coder
la source
2
Ceci est juste un double d'une réponse existante . Comme il semble que vous n'avez plus rien à ajouter, pensez à supprimer celui-ci.
zzzzBov
1

Je n'ai rien fait, j'ai simplement copié les DLL du dossier Bin de développement dans le dossier Bin déployé en ligne et cela a bien fonctionné pour moi.

Anjan Kant
la source
0

Comme d'autres l'ont dit, réinstallez simplement le package MVC dans votre projet Web à l'aide de nuget, mais assurez-vous d'ajouter le package MVC à tous les projets en fonction du projet Web, tels que les tests unitaires. Si vous construisez chaque projet inclus individuellement, vous verrez que ceux qui nécessitent la mise à jour.

DeeArgee
la source
0

J'ai eu le même problème et la réinstallation du package ne fonctionne pas.

Mon application s'exécute dans LocalIIS (pas IIS EXPRESS). J'active Assembly Load Trace et découvre qu'il veut charger la charge System.Web.Http à partir de la capture de température inférieure. alors supprimez tous les dossiers catch qu'il contient .

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Fichiers ASP.NET temporaires [mon application]

Mohammadreza
la source
0

J'ai résolu ce problème en annulant les modifications que nuget avait apportées à mon web.configaprès l'exécution nuget. Rétablissez les modifications apportées à une version de travail précédente.

  <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>
roo2
la source
0

Ce qui a résolu le problème pour moi a été de réinstaller la page d'aide de Microsoft ASP.NET Web API 2.2 et Microsoft ASP.NET Web API 2.2 OWIN packages . J'ai réinstallé les deux en même temps, mais je pense que c'est l'ancien qui a résolu le problème.

J'ai essayé les premières solutions proposées ici mais cela n'a pas aidé, puis j'ai comparé mes dépendances avec celles d'un projet qui fonctionnait (à partir d'un cours sur Pluralsight) et les deux dépendances ci-dessus étaient une version inférieure (5.0.0 ) donc je les ai mis à jour vers 5.2.3 et cela a commencé à fonctionner.

lukegf
la source
0

J'ai eu ceci d'un service WCF. Pour moi (comme le problème s'affichait dans le développement local), je devais simplement supprimer le contenu du dossier bin sous la solution. La reconstruction fonctionne à nouveau correctement.

DubMan
la source
0

Version ASP.NET: 4.0.30319.18408 appartient à .Net4.5 et System.Web.Http Version = 4.0.0.0 est compatible pour .NET4.0. Donc, les versions que vous avez ne sont pas compatibles. Vous devez mettre à jour votre System.Web.Http vers la version 5.0.0.0, qui est compatible avec .Net4.5

oscarMg
la source
0

J'ai eu un problème similaire. Tout fonctionnait avant. Il a été créé à l'origine à l'aide de Web Forms et plus tard sur une API Web ajoutée pour certaines choses.

  • J'ai essayé de désinstaller, installer et réinstaller le package Microsoft.AspNet.WebApi.
  • J'ai essayé de supprimer le dossier packages de la solution et de laisser NuGet restaurer dans VS.
  • J'ai essayé de supprimer des références d'assemblage individuelles (sous Références) et de réinstaller des packages.
  • J'ai essayé d'ajouter des redirections de liaison à la version 5.2.3.0 dans web.config mentionné dans plusieurs réponses. Rien n'a fonctionné pour moi.

Ce qui a fonctionné était, dans Visual Studio, de modifier les paramètres de profil de publication de Release à Debug. Étrange, mais c'est ce qui a fonctionné. Donc partager ici.

joym8
la source
0

J'ai rencontré ce problème lors du déploiement sur Azure à l'aide de la fonctionnalité de publication. N'oubliez pas d'effacer les fichiers à destination.

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

Cela a résolu mon problème, au cas où les gens devraient chercher cela comme je l'ai fait. Tout était de la même version dans mon projet / solution, mais pas à la destination vers laquelle je déployais.

Shelby115
la source
0

Si vous utilisez plusieurs projets sur une solution et appelez une méthode dans un projet vers un autre projet, assurez-vous que tous les projets (appelés projet et projet appelant) utilisent la 'System.Net.Http'version unique .

MohammadSoori
la source
0

Changer l'indicateur de version Specfic de true à false pour la dll dans la référence

user2992715
la source
0

J'ai eu le même problème avec System.Web.Http.WebHost, la version = 5.2.6.0 étant référencée mais le dernier package NuGet était 5.2.7.0. J'ai édité les fichiers web.config, réinstallé le package NuGet, puis modifié les fichiers de projet de Visual Studio pour tous mes projets pour m'assurer qu'aucune référence à 5.2.6.0 ne persistait. Même après tout cela, le problème persistait.

Ensuite, j'ai cherché dans le dossier bin pour le projet qui lançait l'exception, où j'ai trouvé une DLL pour l'un de mes autres projets qui n'est pas une dépendance et n'aurait jamais dû y être. J'ai supprimé la DLL incriminée (qui avait été compilée à l'aide de la version 5.2.6.0 de System.Web.Http.WebHost), reconstruit le projet gênant et maintenant il fonctionne.

cghore
la source