web-dev-qa-db-fra.com

Impossible de charger le fichier ou l'assembly System.Net.Http.Primitives. La définition du manifeste de l'Assemblée localisée ne correspond pas à la référence de l'Assemblée

Je travaille sur un programme qui utilise l'API Google. Cependant, chaque fois que j'exécute mon programme, je reçois toujours l'erreur suivante: 

Impossible de charger le fichier ou l'assembly 'System.Net.Http.Primitives, Version = 1.5.0.0, Culture = neutre, PublicKeyToken = b03f5f711d50a3a' 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. 

J'utilise Visual Studio 2012 Express. J'ai essayé de suivre ce link et j'ai parcouru de nombreux forums, mais aucun ne semble fonctionner. Le problème principal semble provenir du fichier DLL "Google.Apis.dll" auquel j'ai fait référence, et il fait référence à System.Net.Http.Primitives v1.5.0.0. Cependant, la version référencée par mon programme est 2.2.13.0. J'ai essayé d'utiliser la référence de programme v1.5.0.0 à la place (j'ai réussi à trouver la dll avec le code source de Google.Apis), mais cela n'a provoqué qu'un autre problème pour lequel j'avais besoin d'une version plus récente de System.Net. Http.Primitives. 

J'essaie de trouver un moyen de contourner ce problème, mais je n'arrive pas à trouver quoi que ce soit qui fonctionne. Merci pour le temps.

65
Tri

J'ai rencontré le même problème avec les API Google. Le principal problème ici est que si vous installez les Microsoft Http Client Libraries, votre projet disposera d'une version mise à jour de la DLL System.Net.Http.Primitives. Le fichier web.config suppose que vous utilisez toujours la version 1.5 par défaut. Il y a deux choses qui doivent arriver pour résoudre ce problème: 

Premièrement: Mettez à jour les dernières versions de Google API et Microsoft Http Client Libraries. Vous pouvez installer les mises à jour via NuGet. Faites un clic droit sur votre site Web, cliquez sur "Gérer les paquets NuGet", sélectionnez Mises à jour à gauche. Au moment de la publication de ce message, certaines des API Google ne sont que dans la version préliminaire. Vous pouvez les installer via NuGet en sélectionnant "inclure la version préliminaire" en haut à gauche de l'écran de mise à jour. 

Deuxièmement Mise à jour/ajouter un dependAssembly dans votre web.config. Pour ce faire, vous devez connaître la version du fichier System.Net.HTTP.Primitives.dll installée. Regardez dans votre répertoire bin dans l'Explorateur Windows. Recherchez System.Net.HTTP.Primitives.dll, cliquez dessus avec le bouton droit, sélectionnez Propriétés, puis cliquez sur l'onglet "Détails". Notez la version située ici. Au moment de cette publication, la mine était 4.0.10.0

Ensuite, ajoutez/mettez à jour une section dependAssembly pour la version correcte. 

<runtime>
  <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
      <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>
69
Paul Lemke

Ce qui a bien fonctionné pour moi, c’est d’installer simplement les "bibliothèques client Microsoft HTTP" de Nuget. 

34
Senkwe

Ajoutez ce qui suit à votre web.config (app.config):

<runtime>
  <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
      <bindingRedirect oldVersion="0.0.0.0-4.2.13.0" newVersion="4.2.13.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>
5
Aviw

Pour moi, cela a fonctionné comme suit:

Sous Visual Studio (2012)> Outils> Nuget Package Manager> Console du gestionnaire de packages . Au-dessus de la console du gestionnaire de packages, j'ai Source du package: nuget.org Projet par défaut: le projet nécessitant le système. Net.Http.Primitives Regarder à l'intérieur du fichier de projet (yourproject.csproj) avec un éditeur que j'ai lu quelle version est nécessaire (dans mon cas, c'était Microsoft.Net.Http.2.2.28)

Alors je suis allé à https://www.nuget.org/packages/Microsoft.Net.Http/ et j'ai cliqué sur ma version sous "Historique des versions" (faites défiler un peu la page si vous ne la voyez pas ) . Après avoir choisi la version, copiez la commande suggérée - dans mon cas, c’était:

Kit d'installation Microsoft.Net.Http -Version 2.2.28

mais si vous avez besoin de la dernière version, c'est juste ceci: 

Package d'installation Microsoft.Net.Http

et vous le collez sur votre console Visual Studio Package Manager précédemment ouverte, comme décrit précédemment. Exécutez la commande.

Dans le projet sous les références, System.Net.Http.Primitives est maintenant mis à jour.

3
Daniele D.

Nous avions le même problème. Mais dans mon cas, la solution consistant à modifier l'app.config de Paul n'a pas fonctionné. La raison en est que je l’utilise comme plugin dans une autre application. Donc, il considère le fichier de configuration de cette application. Nous avons donc obtenu le code Google API de GitHub et construit la bibliothèque Google.Apis.Core après avoir supprimé la dépendance de System.Net.Http.Primitives. Ensuite, nous avons utilisé cette DLL qui a résolu notre problème.

2
Ashish

J'ai eu un problème similaire.

Essayez de mettre à jour le nuget (outils/extensions et mises à jour ...) Ceci a été résolu ainsi que d'autres problèmes.

/ Jonas

2
JoBe

La réponse ci-dessus à propos de assemblybinding est correcte, mais vous ne devez PAS toucher le fichier machine.config.

La chaîne d'assemblage doit être définie dans le fichier de configuration de tous les assemblys EXECUTABLE de votre projet (.exe.config) qui référencent votre bibliothèque et non dans les assemblys de bibliothèque (.dll.config).

1
Echtelion

J'ai rencontré ce problème lorsque j'ai publié mon code qui utilise Google.Apis.Drive.v2 (v1.9.2.1860) pour l'entreprise pour laquelle je travaille. Je leur ai donné le fichier EXE et toutes les DLL générées par Visual Studio (et NuGet), et ils ont eu l'erreur. Je n'ai jamais eu l'erreur.

Le correctif était simple (une fois que je l'ai compris): lors de l'installation de l'API de Nuget, le fichier 'assemblyname.exe.config' est automatiquement généré dans le dossier de sortie (aka Debug ou Release). Tout ce que vous avez à faire est d'inclure ce fichier lorsque vous exécutez l'assembly ailleurs que le dossier dans lequel il a été généré. Voici le code pour ce fichier pour moi:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.29.0" newVersion="4.2.29.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

C'est en gros le "deuxième" correctif de Paul, mais il est automatiquement généré par le gestionnaire de paquets. Le problème pour moi était quand j'ai essayé son "premier" correctif en mettant à jour Google.Apis.Auth et Google.Apis.Core (v1.9.3) cela a aggravé la situation. J'obtiendrais la même erreur, sauf que la version "Google.Apis.Core" était incorrecte (bien que cela ait probablement pu être résolu en incluant le même fichier .exe.config.)

J'espère que cela aide quelqu'un, je sais que ce fil est très ancien, mais c'est celui auquel une recherche rapide par Google m'a conduit.

Edit: oublié de mentionner, cela est pertinent pour une application console ciblant .NET 4.5. Certaines d'entre elles sont probablement toujours pertinentes pour d'autres cibles .NET ou ASP.NET, mais je ne le sais pas avec certitude. Votre kilométrage peut varier.

1
pittofdirk

Kit d'installation Microsoft.Net.Http -Version 2.2.22

Cette version a que dll\packages\Microsoft.Net.Http.2.2.22\lib\net45\System.Net.Http.Extensions.dll

0
user2540680

A été capable de résoudre cela assez facilement. Vient d’ouvrir le gestionnaire de packages Nuget et de mettre à jour le package de bibliothèque cliente Microsoft ASP.NET Web API 2.2. Cette mise à jour de Microsoft.Net.Http à la version la plus récente qui résolvait le problème avec l’assembly System.Net.Http.Primitives ne pouvait pas être localisée. J'espère que cela t'aides!

0
R007

En quelque sorte, la réponse populaire de Paul Lemke ne fonctionnait pas pour moi ... Le projet est une application de formulaires Web qui a démarré avec .net v 2.0 et a été mise à niveau vers .net version 4.5.

J'ai mis à jour les paquetages et le nuget a créé les dépendances dependAssembly/bindingRedirect correctes.

Selon certains commentaires, ce n'est probablement pas la meilleure idée de changer votre fichier machine.config local.

J'ai eu un attribut dans mon fichier web.config qui faisait que l'application ignorait les bindingRedirects.

<configuration xmlns="http://schemas.Microsoft.com/.NetConfiguration/v2.0">

J'ai supprimé cet attribut xmlns et cela a commencé à fonctionner.

0
Vincejtl

J'ai eu un problème similaire avec les scripts PowerShell pour TFS 2017. Les scripts ont appelé le code .NET pour effectuer des actions personnalisées pendant les processus de génération. J'ai continué à avoir des erreurs sur les conflits de version dll.

Je ne pouvais pas résoudre le problème tant que je n'avais pas implémenté de point d'ancrage dans l'événement AppDomain AssemblyResolve selon cette réponse: Utilisation des redirections de liaison pour les compléments Office

Cette solution a forcé le processus à utiliser des dll à partir du chemin actuel. Je sais que c'est un peu un bidouillage, mais j'avais lu que lors de l'exécution de PowerShell, vous ne pouvez pas toujours utiliser les redirections de liaison, ce que j'avais initialement pu essayer: https://github.com/google/google-api -dotnet-client/issues/555

0
Mr.Zzyzzx

Dans mon cas, je faisais référence aux packages NuGet à partir d'une bibliothèque de classes. NuGet ne parvient pas à nous informer que l'app.config de la bibliothèque de classes est complètement ignoré et nous devons copier manuellement son contenu dans l'app.config du fichier .exe.

0
DBN

NuGet a apporté la modification suivante dans Web.Config

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

à

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

Cela faisait suite à l’installation et à la suppression ultérieure (par contrôle de version) de ce paquet https://www.nuget.org/packages/Microsoft.AspNet.WebApi.MessageHandlers.Compression/

0
gb2d