Ne pouvait pas charger le système de fichier ou d'assemblage.Net.Http, Version=2.0.0.0 dans L'API Web MVC4

j'ai un petit problème bizarre.

J'ai développé une application avec MVC 4 et la nouvelle API Web et cela fonctionne très bien localement. J'ai installé MVC4 sur le serveur et déployé l'application. Maintenant je reçois l'erreur suivante:

ne pouvait pas charger le système de fichiers ou d'assemblage.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken = 31bf3856ad364e35' ou l'une de ses dépendances. L'assemblée manifeste définition ne correspond pas à l'assemblée référence. (Exception de HRESULT: 0x80131040)

Description: Une exception non gérée s'est produite pendant l'exécution de la demande web actuelle. Veuillez examiner la trace de la pile pour plus d'informations sur l'erreur et son origine dans

assez drôle, la version de système.Net.Http que j'ai localement soit dans mon dossier package, soit dans le ASP.NET le dossier MVC 4Assemblies est 1.0.0.0. J'ai effectivement supprimé la référence à Système.Net.Http de mon projet, mais je reçois toujours le même message. Je ne sais pas très bien d'où vient la référence 2.0.0.0 et pourquoi elle fonctionnerait localement mais pas sur le serveur.

en Regardant le nuget dépendances:

ASP.NET les bibliothèques Beta (Web API Core Libraries) dépendent du système.Net.Http.Formatage.

Et Système.Net.Http.Le formatage dépend du système.Net.Http.

Je suppose que c'est d'où cela vient de. Mais j'ai la Version 2.0.20126.16343 de ce paquet installé, c'est juste que la dll à l'intérieur a la version 1.0.0.0

est-ce que je manque quelque chose?

mise à jour:

il s'agit d'une sous-application d'une autre ASP.NET app, mais l'autre est toujours basé sur les WebForms. Donc, quelque chose se fait foiré. Mais si je fais un nettoyage sous la section assemblage dans le web.config si ne trouve même pas l'application elle-même plus.

91
demandé sur Chris S 2012-02-24 18:00:11

17 réponses

j'ai eu le même problème avec le déploiement de mon application à appharbor. Le problème qu'il ne supporte pas encore .NET 4.5. Ce que j'ai fait.

  1. commuté mon projet sur .NET 4.0 profile.
  2. Désinstaller le paquet NuGet de L'API Web.
  3. a de nouveau installé le paquet NuGet de L'API Web (Beta).
  4. vérifié .le fichier csproj contient pour toutes les assemblées référencées, donc il le prendra toujours dans le dossier Bin, au lieu de GAC.
30
répondu Alexander Beletsky 2012-03-28 07:25:56

j'ai eu la même erreur en déployant l'application web déjà convertie (de .net 4.5 à 4.0) sur IIS 6.0.

sur le web.config runtime 151980920 "section j'ai trouvé

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>

que j'ai changé en

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>

fonctionne maintenant comme le charme.

110
répondu Krzysztof 2013-09-30 17:59:34

Mine a travaillé avec:

Note la redirection de 1 à 4 2.0

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a"   culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
10
répondu Clive 2012-08-05 20:58:42

dans le dossier de références de votre projet, il devrait y avoir une référence à cette dll, et la version devrait être 2.0.0.0. Assurez-vous que ce paramètre est défini pour copier Local = true. Et ensuite assurez-vous qu'il trouve son chemin vers le dossier bin de votre application serveur.

c'est une des bibliothèques qui est maintenant gérée par nuget. Donc, ouvrez Nuget et assurez-vous que tout est à jour. Et dans vos projets de paquets, le fichier devrait être ici: \packages\System.Net.Http.2.0.20126.16343\lib\net40

vous pourriez essayez aussi de créer une nouvelle application MVC4 et voyez si le fichier apparaît pour celle-ci.

2
répondu GeekyMonkey 2012-02-28 01:59:19

dans mon cas je l'ai corrigé d'une manière beaucoup plus facile, il suffit de donner un HintPath à la référence au paquet nuget:

     <Reference Include="System.Data.Entity" />
     <Reference Include="System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
       <Private>True</Private>
+      <HintPath>..\..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.dll</HintPath>
     </Reference>
     <Reference Include="System.Net.Http.WebRequest, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
       <Private>True</Private>
+      <HintPath>..\..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.WebRequest.dll</HintPath>
     </Reference>
     <Reference Include="System.Numerics" />
     <Reference Include="System.Security" />
2
répondu knocte 2014-10-07 06:25:36

dans mon cas, j'ai ajouté involontairement une dépendance au système.Net.Http version 2.1.10.0 par NuGet. Je n'ai pas pu m'en débarrasser dans le Gestionnaire de paquets NuGet (parce que d'autres paquets semblaient en dépendre). Cependant, ces paquets ne dépendent pas de cette version particulière. Voici ce que j'ai fait pour m'en débarrasser (vous pouvez aussi utiliser la console NuGet à la place (en utilisant le paramètre –force):

  • modifier la version de Microsoft.Net.Http en paquet.config de 2.1.10.0 à 2.0.0.0
  • désinstaller BCL Portability Pack dans NuGet Package Manager
  • se débarrasser manuellement des bibliothèques dépendantes (système.Net. qui ont la version 2.1.10.0)
  • ajouter une référence au système.Net."
1
répondu Dunken 2013-06-20 07:48:25

Dans le fichier de config que j'ai supprimé dépendante de l'Assemblée:

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.0.0.0"/>
<dependentAssembly>

maintenant ça marche très bien.

1
répondu StefanoM5 2013-07-26 10:13:50

j'étais confronté à ce problème sur un serveur de test (Windows 2008 R2) qui était censé être "prêt" pour le déploiement;)

l'allusion était que lorsque j'ai vérifié les versions de System.net entre ma machine DEV et le serveur de déploiement, ils ne correspondaient pas.

fixée selon les étapes ci-dessous:

  1. Download. NET Framework 4.5 installateur autonome à partir de ici

  2. a lancé l'installateur sur la machine de déploiement

après l'installation de l'infrastructure, serveur voulais un redémarrage, donc fait et volla! Nous sommes bon!!

1
répondu dotnetguy 2013-10-08 13:02:26

nous utilisons VS 2013, créé une nouvelle API Web MVC 4 et avait un problème avec le system.net.http.dll ce n'est pas la bonne version lorsqu'elle est construite sur notre TeamCity server, mais elle s'appuie parfaitement sur nos machines de développement locales qui ont VS 2013 installées.

nous avons finalement déterminé le problème.

lors de la création d'une nouvelle API Web MVC 4 et du choix du framework 4.0 lors de la création du projet, nous avons trouvé la bonne version du paquet NuGet pour DLL était mise dans: ..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.dll

Mais le .le fichier csproj pour ce projet a indiqué le chemin pour ce system.net.http.dll le fichier est: ..\packages\Microsoft.Net.Http.2.0.30506.0\lib\net40\System.Net.Http.dll

donc, lorsque la construction est tentée, elle échoue sur cette différence de chemin, mais trouve la bonne version de framework du fichier ailleurs sur la machine de développement, mais pas sur notre serveur de TeamCity build.

jusqu'à présent, c'est la seule différence que nous avons trouvé. Modification du chemin d'accès dans le .fichier csproj et en s'appuyant sur la machine de développement local avec VS2013 fonctionne toujours trouver.

vérifier cela dans le contrôle de version et avoir notre TeamCity build server (sans VS 2013 installé localement) trouve maintenant la bonne version de la .dll dans son dossier paquet NuGet pour la solution et construit avec succès plutôt que de chercher une autre version de system.net.http.dll et trouver une version plus récente qui ne correspond pas au framework provoque donc des échecs de construction.

pas sûr que ça aide.

Vérifiez votre chemin de fichier de projet pour la DLL et assurez-vous qu'il correspond à votre chemin de dossier de paquet pour la DLL.

1
répondu Eric Reiss 2014-05-15 16:12:23

je simplifie juste les autres réponses pour ce qui a fonctionné pour moi.

je suis allé au NuGet manager, désinstallé les paquets liés (dans mon cas, "Microsoft ASP.NET Web API 2.1 Client Libraries" and "Json.NET") et les a réinstallés. Juste pris quelques clics.

1
répondu Rudy Scoggins 2015-08-03 14:12:46

fermez le projet, ouvrez-le à nouveau. Puis, Solution Propre + Construire. Travaille pour moi

0
répondu Lücks 2013-08-22 01:22:29

pour la version 2.2.15.0, j'ai fait:

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.2.15.0"/>
</dependentAssembly>
0
répondu Osama 2013-10-01 13:59:29

j'avais exactement le même numéro! J'ai regardé mon onglet Avertissements dans VS et j'ai remarqué qu'un de mes paquets nuget faisait indirectement référence .Netfram Framework Version 4.5.0.0. J'ai dû désinstaller ce paquet, puis réinstaller la version 4.0, mais n'oubliez pas de spécifier les versions du paquet qui prennent en charge la version 4.0(il reviendra par défaut à la version 4.5 si vous ne spécifiez pas lors de l'installation du paquet). Espérons que cette aide!

0
répondu Javier Gonzalez 2013-12-12 19:18:46

nous avons eu ce qui se passe sur un serveur après le déploiement. Elle a été causée par:

A) Vieux fichiers dans le dossier bin qui traînent toujours et qui auraient dû être supprimés

ou

B) ne pas avoir accès en lecture au dossier de L'Application Pool Identity user.

en d'autres termes, pour nous, cela a été résolu en fixant les permissions sur les dossiers pour le site et en éliminant le dossier bin et redéployer.

0
répondu Chris Moschini 2014-07-23 21:33:02

j'ai eu le même problème avec Gembox.tableur.dll de la version 31.

" impossible de charger le fichier ou l'assembly 'GemBox.Tableur, Version = 39.3.30.1095, Culture = neutre, PublicKeyToken=b1b72c69714d4847' ou l'une de ses dépendances. Le situé à l'assemblée manifeste définition ne correspond pas à l'assemblée référence. (Exception de HRESULT: 0x80131040) "

j'ai essayé presque tout de ces articles et aucun d'entre eux travaillaient. Il vient d'être réparé avec simple step.

j'ai essayé de construire des projets individuels qui ont essentiellement mis en place la référence de version correcte à la dll et l'erreur a été entièrement disparu de la solution.

0
répondu Rachana 2016-01-28 20:05:12

Aller d'un problème similaire et la directive mentionné dans de nombreux commentaires a bien fonctionné

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.0.0.0"/>
<dependentAssembly>

bien que, vous devez vous assurer que la couverture de l'ancienne version est assez élevée sinon les nouvelles versions peuvent ne pas être redirigées vers la version spécifique dont vous avez besoin et l'emplacement en utilisant cette nouvelle référence ne fonctionnera pas correctement puisque l'ancienne référence est déjà dans le répertoire bin.

0
répondu Micaël 2016-02-08 11:23:56

pour cette erreur (et similaire), il vaut la peine de passer par NuGet Consolidate (Solution > Gérer les paquets NuGet...) pour s'assurer que les mêmes versions de composants référencées sont cohérentes dans chaque bibliothèque de classe référencée dans la solution, car même une version légèrement plus ancienne peut avoir des dépendances sur d'autres composants plus anciens. Il est simple à utiliser en conjonction avec les mises à jour et peut sauver beaucoup de douleur.

cela a résolu ce problème pour moi et je dirais qu'il est un must pour familiarisez-vous avec si vous créez des bibliothèques helper qui font également référence à MVC ou à D'autres composants NuGet basés sur le web.

0
répondu mhapps 2017-02-08 11:48:17