81 votes

Impossible de charger le fichier ou l'assemblage System.Net.Http, Version=4.0.0.0 avec ASP.NET (MVC 4) Web API OData Prerelease

Problème

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

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

Mon projet MVC 4 est tout nouveau et vraiment petit, il n'y a rien d'extraordinaire. Je vise le cadre .NET 4.5

J'ai besoin de ça. paquet nuget à implémenter 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éparer ça ?

Mes versions de System.Web.Http

Sur CAG J'ai la version 5.0.0.0 de System.Web.Http

gacutil -l System.Web.Http Le cache d'assemblage global contient les assemblages suivants assemblées suivantes : System.Web.Http, Version=5.0.0.0, Culture=neutre, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL

Sur Visual Studio Lorsque je parcours les assemblages, la version donnée de System.Web.Http est la suivante 4.0.0.0 (Pourquoi ?)

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

  • A la version 5.0.0.0
  • Indique le \lib\net45\ du paquet
  • A CopyLocal=true

Les choses que j'ai essayées

J'ai essayé de lier la redirection 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 ça me donne une autre exception :

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

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

Questions liées

Erreur d'analyse de code Could not load file or assembly 'System.Net.Http, Version=2.0.0.0 in MVC4 Web API Impossible de charger le fichier ou l'assemblage 'System.Net.Http, Version=2.0.0.0 dans l'API Web MVC4.

1 votes

Peut-être que cette réponse peut vous aider : stackoverflow.com/a/18700279/795876

164voto

Jay Douglass Points 1976

Visual Studio 2013 dispose d'une nouvelle fonctionnalité pour prendre en charge cette question. Lorsque vous construisez 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 au 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 avoir le web.config extrait (si vous utilisez le contrôle de source TFS) pour que VS édite le fichier automatiquement. Merci pour l'astuce !

7 votes

J'aimerais pouvoir upvoter 10 fois. C'était bien que VS le fasse automatiquement. Merci pour l'astuce !

4 votes

Malheureusement, cela ne fonctionne pas toujours. En fait, je dirais que le plus souvent, le fait de double-cliquer sur cet avertissement ne donne rien.

3 votes

Il faut que la configuration web/app qui est modifiée soit extraite. Pour une raison quelconque, VS ne semble pas vouloir vérifier le fichier pour vous dans ce cas.

39voto

Yves M. Points 1439

J'ai réussi à le faire fonctionner en mettant à niveau le paquet WebApi vers la version préversion à l'aide de nuget :

PM> Microsoft.AspNet.WebApi -Pre

Afin de forcer le projet à utiliser la dernière version de WebApi, quelques modifications du Web.config de la racine ont été nécessaires :

1) Version des pages Web de 2.0.0.0 à 3.0.0.0

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

2) Redirection de la liaison 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 fortement inspirée de WebAPI OData 5.0 Beta - L'accès à GlobalConfiguration provoque une erreur de sécurité.

3 votes

Cela a fonctionné pour moi - J'ai rencontré le même problème lorsque j'ai installé le dernier paquet CORS web api à cause de la mise à jour de la dépendance system.net.http.

1 votes

Tu es génial, mec, merci beaucoup. Dans mon cas, le web config n'a pas été mis à jour par la restauration nuget, je l'ai fait manuellement après le déploiement.

0 votes

De même, cette réponse reçoit un +1 parce que lorsque VS ne le fait pas pour vous, vous avez besoin de cette réponse pour être capable de faire fonctionner la liaison vous-même.

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 lorsque j'ai créé un projet vide et installé HotTowel via nuget dans VS 2012 à partir du 23/10/2013.

Pour corriger, j'ai mis à jour via Nuget les paquets Web Api Web Host et Web API à 5.0, la version actuelle dans NuGet en ce moment (23/10/2013).

J'ai ensuite ajouté les directives de liaison :

<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 à partir de la console du gestionnaire de paquets NuGet.

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

Et alors vous pourrez 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 réintroduisez-les en naviguant dans votre dossier bin (où elles ont été copiées par nuget). La version du fichier indique maintenant 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:

X