web-dev-qa-db-fra.com

Impossible de charger le fichier ou l'assembly 'System.Net.Http

Dans ma vue de diagnostic de ma sortie de génération montre ce conflit

Il y avait un conflit entre "System.Net.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a" et "System.Net.Http, Version = 4.1.1.2, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a". (TaskId: 20) "System.Net.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a" a été choisi car il était principal et "System.Net.Http, Version = 4.1.1.2, Culture = neutre, PublicKeyToken = b03f5f7f11d50a3a "ne l'était pas. (TaskId: 20) Références qui dépendent de "System.Net.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a" [C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4 .6.1\System.Net.Http.dll]. (TaskId: 20)

Je suis arrivé ici en ajoutant le paquet de pépites RestSharp. Je n'avais pas de problème jusqu'à ce que j'aie installé cela et je pense que l'un des éléments qui l'accompagnent peut avoir causé ce problème. J'ai essayé de le désinstaller mais cela n'a pas fonctionné.

14
Dan

L'installation du package Nuget: System.Net.Http version 4.3.3 installe la version correcte = 4.1.1.2

cela se traduira par la référence suivante dans votre fichier de projet:

<Reference Include="System.Net.Http, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\..\..\..\packages\System.Net.Http.4.3.3\lib\net46\System.Net.Http.dll</HintPath>
</Reference>
13
Gerrie Pretorius

Si vous utilisez vs2017, certains projets forceront la référence à system.net.http (4.2.0.0) Lorsque vous installez à partir de nuget (version 4.3.3) et que votre system.net.http sera 4.1.1.2

-> ce sera un conflit

Donc, dans votre web.config ou app.config, vous pouvez passer à 4.1.1.2 ou 4.2.0. dépend de la version qui a été copiée dans le dossier bin lors de l'exécution

<dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.1.1.2" />
      </dependentAssembly>
6
Grey Wolf

J'utilise .NET Framework 4.7.2 et Visual Studio 15.5 . Lorsque j'ai mis à niveau System.Net.Http 4.3.3 vers 4.3.4 , J'ai reçu l'erreur "Impossible de charger":

{"Impossible de charger le fichier ou l'assembly 'System.Net.Http, Version = 4.2.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' ou l'une de ses dépendances. Le système ne peut pas trouver le fichier spécifié.": "System.Net. Http, Version = 4.2.0.0, Culture = neutre, PublicKeyToken = b03f5f7f11d50a3a "}

J'ai dépassé cela uniquement pour obtenir une FileNotFoundException:

System.IO.FileNotFoundException HResult = 0x80070002 Message = Impossible de charger le fichier ou l'assembly 'System.Net.Http, Version = 4.2.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' ou l'une de ses dépendances. Le système ne peut pas trouver le fichier spécifié.

Ce fil dans le projet .NET Core sur GitHub traite de ce problème, et j'ai trouvé ce message dans le . NET Le projet Core sur GitHub sera très utile:

https://github.com/dotnet/corefx/issues/25773#issuecomment-350036434

Mon (pauvre) résumé: Microsoft essaie d'éliminer le besoin du package NuGet System.Net.Http car il s'agissait d'une solution de contournement pour d'autres problèmes de version. . NET Framework 4.7.1 et VS 15.5 ont des changements qui (devraient ?) élimine le besoin de celui-ci et les fixations associées.

J'ai supprimé le package NuGet System.Net.Http de mes projets et ajouté des références au System.Net . Http inclus avec . NET Framework 4.7.2 , et tout est à nouveau en forme de navire.

5
skst

Cause fondamentale: Vous obtenez normalement un tel problème lorsque vous prenez la référence de certaines bibliothèques tierces dans votre application.

Par exemple, vous avez pris la référence de RestSharp (Une bibliothèque tierce) de NuGet. Ce RestSharp peut avoir utilisé la référence de System.Net.Http4.2.0.0 version. Et votre projet a également pris la référence à System.Net.Http4.0.0.0 (Du GAC). Maintenant, lorsque vous exécutez l'application et essayez d'appeler une méthode qui utilise RestSharp , en même temps, Runtime (CLR) essaie de localiser le System.Net.Http Assemblage avec version 4.2.0.0 & quand il ne parvient pas à localiser la version souhaitée, il jette System.IO.FileNotFoundException exception avec message d'erreur ci-dessous.

Impossible de charger le fichier ou l'assembly "System.Net.Http, version = 4.2.0.0, Culture = neutre, PublicKeyToken = b03f5f7f11d50a3a" ou l'une de ses dépendances. Le système ne peut pas trouver le fichier spécifié.

Ici vous pouvez voir Comment le runtime localise les assemblages ?

Solution: Ajoutez simplement la configuration ci-dessous dans le web.config ou app.config de votre projet de démarrage.

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

Cette configuration demande au runtime de résoudre System.Net.Http Assemblage avec 4.0.0.0 version uniquement, chaque fois qu'il recherche cet assembly pour toute version entre 0.0.0.0 à 4.2.0.0.

Voici le schéma complet:

<configuration>  
   <runtime>  
      <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">  
        <dependentAssembly>
            <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
        </dependentAssembly>
      </assemblyBinding>  
   </runtime>  
</configuration> 
1
Ankush Jain

Les bibliothèques system.net.http sont désormais distribuées dans le cadre du .Net Standard Framework et cela peut provoquer des problèmes, généralement lorsque vous mettez à jour le package Nuget vers une version plus récente.

La solution qui a fonctionné pour moi a été de supprimer le package System.Net.Http (et le package Formatters qui en dépend) de Nuget, et de supprimer toutes les références aux bibliothèques system.net.http dans app.config (elles seront souvent être des assemblées dépendantes).

Enfin, modifiez votre fichier de projet pour ajouter une référence à http à partir du cadre comme ceci:

enter image description here

1
Liam

Après la mise à niveau du framework 4.6.1 vers 4.7.2, nous avons commencé à obtenir cette erreur et la solution finale était d'aller dans le fichier de configuration Web, recherchez ceci:

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

et remplacez-le par

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

et le changement effectué ci-dessus était juste ceci: newVersion = "4.0.0.0"

0
Raghav