80 votes

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 (MVC 4)

Problème

Après l'installation de Microsoft ASP.NET l'API Web OData paquet 5.0.0-rc1 de la version bêta, je me retrouve avec l'exception suivante:

Impossible de charger le fichier ou l'assembly 'Système.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' ou une de ses les dépendances. L'assemblée manifeste définition ne fait pas de match de l'assemblée de référence. (Exception de HRESULT: 0x80131040)

Mon MVC 4 projet est tout nouveau et vraiment petit, rien de fantaisie. Je cible .NET framework 4.5

J'ai besoin de ce package nuget à mettre en œuvre PATCH à l'aide de la classe Delta Lorsque j'utilise la version 4.0.0.0 de l'emballage, le Delta de la classe n'est pas de travail).

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

Mes versions de Système.Web.Http

En GAC j'ai la version 5.0.0.0 de Système.Web.Http

gacutil -l Système.Web.Http Le Global Assembly Cache contient les ensembles suivants: Système d'.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL

Dans Visual Studio, quand je navigue dans les assemblées, la version donnée du Système.Web.Http est 4.0.0.0 (Pourquoi?)

Dans mon projet, la référence au Système.Web.Http

  • La version 5.0.0.0
  • Les Points à l' \lib\net45\ dossier de l'emballage
  • A CopyLocal=true

Choses que j'ai essayé

J'ai essayé de lier rediriger v 4.0.0.0 à 5.0.0.0 dans le 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 il me donne une autre exception:

Tenter par la méthode 'Système.Web.Http.GlobalConfiguration..cctor()' domaine de l'accès 'Système.Web.Http.GlobalConfiguration.CS$<>9__CachedAnonymousMethodDelegate2' a échoué.

Je suppose que v 4.0.0.0 vraiment besoin d'être utilisé par les Web de base de l'Api du moteur.

Liés à des questions

L'Analyse de Code d'erreur impossible de charger le fichier ou l'assembly 'Système.Net.Http, Version=2.0.0.0 dans MVC4 Web API Impossible de charger le fichier ou l'assembly 'Système.Net.Http, Version=2.0.0.0 dans MVC4 Web API

162voto

Jay Douglass Points 1976

Visual Studio 2013 a une nouvelle fonctionnalité pour prendre soin de cela. Lorsque vous générez l'application, vous devriez voir mises en garde sur les différentes versions d'un assemblage d'être référencé. Double-cliquez sur l'avertissement à ajouter de l'assemblée de liaison des redirections pour le web.config.

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

jeff.eynon les notes ci-dessous que vous devez avoir sur le web.config vérifié (si utilisation de TFS source) pour obtenir des SV à éditer le fichier automatiquement. Merci pour l'astuce!

38voto

Yves M. Points 1439

J'ai fait le travail par la mise à niveau de la WebApi package de la version bêta à l'aide de nuget:

PM> Microsoft.AspNet.WebApi -Pre

Afin de forcer le projet à l'aide de la dernière version de WebApi, certaines modifications de la racine Web.config étaient nécessaires:

1) les Pages web Version 2.0.0.0 à 3.0.0.0

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

2) redirection de Liaison vers 5.0.0.0 pour le Système.Web.Http et du Système.Net.Http.Mise en forme

<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 très inspiré de WebAPI OData 5.0 Bêta - Accès GlobalConfiguration jette Erreur de Sécurité

11voto

klabranche Points 15518

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 remédier à cela, 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>
 

8voto

Sameer Alibhai Points 794

Ou vous pouvez le faire depuis 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

4voto

JJ_Coder4Hire Points 301

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: