web-dev-qa-db-fra.com

Impossible de charger le fichier ou l'assembly System.Net.Http, version = 4.0.0.0 avec la version préliminaire OData de l'API Web ASP.NET (MVC 4)

Problème

Après avoir installé le package OData de l'API Web ASP.NET Microsoft 5.0.0-rc1 , je me retrouve avec l'exception suivante:

Impossible de charger le fichier ou l'assembly 'System.Web.Http, Version = 4.0.0.0, Culture = neutre, PublicKeyToken = 31bf3856ad364e35' ou l'une de ses dépendances. La définition du manifeste de l'Assemblée localisée ne correspond pas à la référence de l'Assemblée. (Exception de HRESULT: 0x80131040)

Mon projet MVC 4 est flambant neuf et vraiment petit, rien d’extraordinaire. Je cible .NET Framework 4.5

J'ai besoin de ceci paquet de nuget à implémente PATCH en utilisant la classe Delta (lorsque j'utilise la version 4.0.0.0 du paquet, la classe Delta ne fonctionne pas).

Comment puis-je résoudre ce problème?

Mes versions de System.Web.Http

Dans GAC j'ai la version 5.0.0.0 de System.Web .Http

gacutil -l System.Web.Http Le Global Assembly Cache contient les assemblys suivants: System.Web.Http, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 ,oprocessArchitecture = MSIL

Dans Visual Studio , lorsque je navigue dans des assemblys, la version donnée de System.Web.Http est 4.0.0.0 (Pourquoi?)

Dans mon projet , la référence à System.Web.Http

  • A la version 5.0.0.0
  • Pointe vers le dossier\lib\net45\du paquet
  • A CopyLocal = true

Choses que j'ai essayées

J'ai essayé de lier les redirections v 4.0.0.0 à 5.0.0.0 dans Web.config

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

Mais cela me donne une autre exception:

La tentative par la méthode 'System.Web.Http.GlobalConfiguration..cctor ()' pour accéder au champ 'System.Web.Http.GlobalConfiguration.CS $ <> 9__CachedAnonymousMethodDelegate2' a échoué.

Je suppose que la v 4.0.0.0 doit vraiment être utilisée par le moteur Web Api principal.

Questions liées

Erreur d'analyse de code Impossible de charger le fichier ou l'assembly 'System.Net.Http, version = 2.0.0.0 dans l'API Web MVC4Impossible de charger le fichier ou l'assembly' System.Net.Http, version = 2.0.0.0 dans l'API Web MVC4

81
Yves M.

Visual Studio 2013 propose une nouvelle fonctionnalité. Lorsque vous créez l'application, vous devriez voir des avertissements concernant les différentes versions d'un assemblage référencé. Double-cliquez sur l'avertissement pour ajouter des redirections de liaison d'assemblage vers le fichier web.config.

Voir http://msdn.Microsoft.com/en-us/library/2fc472t2.aspx pour plus de détails.

jeff.eynon note ci-dessous que vous devez extraire le fichier web.config (si vous utilisez le contrôle de code source TFS) pour que VS modifie automatiquement le fichier. Merci pour le conseil!

164
Jay Douglass

Je l'ai fait fonctionner en mettant à jour le paquet WebApi vers la version préliminaire en utilisant nuget:

PM> Microsoft.AspNet.WebApi -Pre

Pour forcer le projet avec la dernière version de WebApi, certaines modifications du fichier Web.config racine étaient nécessaires:

1) Version des pages Web du 2.0.0.0 au 3.0.0.0

<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
</appSettings>

2) Liaison à la redirection vers 5.0.0.0 pour System.Web.Http et System.Net.Http.Formatting

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

Je pense que c'est ça

PS: Solution hautement inspirée de WebAPI OData 5.0 Beta - L’accès à GlobalConfiguration génère une erreur de sécurité

39
Yves M.

J'ai rencontré ce problème lorsque j'ai essayé de mettre à jour un projet Hot Towel à partir du modèle de projet et que j'ai créé un projet vide et installé HotTowel via nuget dans VS 2012 à compter du 23/10/2013.

Pour résoudre ce problème, j'ai mis à jour via Nuget les packages de l'hôte Web Api Web et de l'API Web vers la version 5.0, la version actuelle de NuGet pour le moment (10/23/2013).

J'ai ensuite ajouté la liaison directe:

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

J'ai rencontré le même problème et je l'ai résolu en définissant CopyLocal sur true pour les bibliothèques suivantes:

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

Je dois ajouter que j'utilise MVC4 et NET 4

11
Bronek

Ou vous pouvez le faire à partir de la console NuGet Package Manager

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

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

8
Sameer

Supprimez System.Web.Http et System.Net.Http.Formatting de vos références et ajoutez des références en accédant à votre dossier bin (où elles ont été copiées par nuget). La version du fichier indique maintenant la version 5.0.0.0.

4
JJ_Coder4Hire

J'ai fait face à la même erreur. Lorsque j'ai installé Unity Framework pour Dependency Injection, les nouvelles références de Http et HttpFormatter ont été ajoutées à ma configuration. Alors voici les étapes que j'ai suivies.

J'ai lancé la commande suivante sur la console nuGet Package Manager: PM> Install-Package Microsoft.ASPNet.WebAPI -pre

Et ajouté une référence physique à la DLL avec la version 5.0

1

Cette erreur est apparue plusieurs fois sur plusieurs projets différents.

Ce que j’ai finalement compris, c’est que lorsque j’ai construit, il y avait déjà une copie de l’assemblée binaire system.web.mvc dans mon dossier bin.

Pour résoudre ce problème, cliquez avec le bouton droit de la souris sur l'assemblage dans la liste de références et sélectionnez "Propriétés". Vérifiez s'il s'agit de la dernière version en consultant la propriété "Version". Si c'est le cas, basculez "Copier local" sur true.

Cela garantira que la version référencée dans votre projet est la version qui se retrouvera dans votre dossier des fichiers binaires.

Si l'erreur persiste, essayez d'exécuter nuGet pour obtenir la dernière version, puis réessayez.

Bonne chance - cette erreur est une douleur!

1
user1628627

je résous par voie de nuget. le premier vous installez nuget. la seconde que vous utilisez.
illustration suivante: 

troisième: vérifiez s'il s'agit de la dernière version en consultant la propriété "Version".

Enfin, vous vérifiez que le projet a de nouveau la dernière version.

1
Nguyễn Thị Nữ

J'ai rencontré le même type de problème et j'ai suivi les étapes ci-dessous pour le résoudre.

Allez dans Outils -> Gestionnaire de packages de bibliothèque -> Console du gestionnaire de packages et exécutez la commande ci-dessous.

Package d'installation Microsoft.ASPNet.WebAPI -pre

0
Santu Ghosh

Entré dans le gestionnaire de paquets Nuget et mis à jour mes paquets. Maintenant ça marche. Le principal que j'ai mis à jour était le Microsoft.AspNet.WebApi.Core. Vous devrez peut-être le faire avec les deux projets pour synchroniser les références appropriées.

0
Exzile

Après avoir modifié les références dans le fichier Web.config comme indiqué ci-dessus, nous avons résolu les références.

Je faisais face à un problème similaire.

Pour nous, nous avons les références Microsoft.Data.Edm.dll et OData.dll et d'autres assemblys de Program Files:

C:\Program Files (x86)\Microsoft WCF Data Services\5.0
                          \bin\.NETFramework\Microsoft.Data.Edm.dll

et

C:\Program Files (x86)\Microsoft WCF Data Services\5.0
                        \bin\.NETFramework\Microsoft.Data.OData.dll

et la version était 5.6.4.

Une fois que j'ai changé la référence des deux assemblys en C:\....Project\packages\Microsoft.Data.Edm.5.6.0, le problème a été résolu.

0
Gaurav Gupta

Si ce problème se produit, veuillez consulter web.config dans la section ci-dessous.

La section ci-dessous donne la version de la DLL particulière utilisée

après avoir vérifié cette section dans web.config, ouvrez l'Explorateur de solutions et sélectionnez une référence dans l'arborescence du projet, comme indiqué. Explorateur de solutions-> Référence

Après avoir développé la référence, recherchez la DLL qui a provoqué l'erreur. Cliquez avec le bouton droit de la souris sur la référence de la DLL et recherchez la version illustrée ci-dessus.

Si la version de la DLL de configuration et la DLL référencée sont différentes, vous obtiendrez cette exception. Assurez-vous que les deux sont de la même version, ce qui aiderait.

0
user3235808