web-dev-qa-db-fra.com

Conflits constatés entre System.Net.Http

J'ai plusieurs projets dans ma solution VS. Chaque fois que j'ajoute le package NuGet "System.Net.Http" à celui-ci, il affiche la version 4.2.0.0. Ensuite, je fais la même chose et ajoute le même paquet NuGet, cependant, l’autre dit la version. 4.1.1.2

 enter image description here  enter image description here

Ensuite, je reçois un avertissement:

Conflits constatés entre System.Net.Http

EDIT1:

Gathering dependency information took 1.7 sec
Attempting to resolve dependencies for package 'System.Net.Http.4.3.3' with DependencyBehavior 'Lowest'
Resolving dependency information took 0 ms
Resolving actions to install package 'System.Net.Http.4.3.3'
Resolved actions to install package 'System.Net.Http.4.3.3'
Retrieving package 'System.Net.Http 4.3.3' from 'nuget.org'.
Adding package 'System.Net.Http.4.3.3' to folder 'C:\...Service\packages'
Added package 'System.Net.Http.4.3.3' to folder 'C:\...Service\packages'
Added package 'System.Net.Http.4.3.3' to 'packages.config'
Successfully installed 'System.Net.Http 4.3.3' to ....Service
Executing nuget actions took 2.05 sec
Time Elapsed: 00:00:03.8937113

S'il vous plaît noter la version correcte installée, Cependant => Props => Version dit 4.1.1.2

 enter image description here

10
ShaneKm

Vous pouvez forcer la version que vous installez pour aligner les deux projets ou trouver un message dans la fenêtre de sortie, ce qui vous indiquerait ce qui ne va pas ou quelles sont vos dépendances . Depuis le lien officiel ne liste pas la version 4.2, je le ferais (à l'échelle de la solution)

Install-Package System.Net.Http -Version 4.1.1

Ou pour les deux projets

Get-Project ProjectName | Install-Package System.Net.Http -Version 4.1.1

Ou encore mieux (en utilisant la dernière version)

Install-Package System.Net.Http -Version 4.3.3

MODIFIER

Apparemment, vous n'êtes pas le premier à expérimenter cela .. Que diriez-vous de la réponse ici ? En gros, vous pouvez aligner cette section du fichier de configuration de both:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.2.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

Vous devrez peut-être adapter la valeur du jeton . Juste au cas où, pourriez-vous coller le fichier de configuration pour les deux projets =

3
Francesco B.

Cela a tendance à se produire lorsque vous avez une référence à la structure System.Net.Http, mais qu'une de vos références de package nécessite le package NuGet System.Net.Http.

Voyez si vous avez une référence à cet assemblage, supprimez-le et installez plutôt le paquet NuGet

7
erikkallen

Après avoir parcouru toutes les solutions présentées ici et les références citées dans cette réponse , j’ai finalement résolu le problème complètement. C’est ce que je crois que toute personne confrontée à ce problème devrait faire:

  1. Mettez à jour tous les paquets NuGet à la dernière.
  2. Migrez NuGet de packages.config vers PackageReference en suivant les instructions ici . Pour chaque projet de votre solution, dans l'Explorateur de solutions, cliquez avec le bouton droit de la souris sur le nœud References ou sur le fichier packages.config, puis sélectionnez Migrer les packages.config vers PackageReference .... Les projets de site Web ASP.NET doivent continuer à utiliser packages.config.
  3. Supprimez toutes les références à System.Net.Http qui ne sont pas gérées par NuGet (pour les projets utilisant PackageReference, vous devriez voir le symbole NuGet  enter image description here à côté de la référence dans l'Explorateur de solutions). Remplacez les références System.Net.Http supprimées par le package NuGet correspondant si vous êtes certain que votre projet nécessite System.Net.Http (essayez de construire sans elle auparavant). Pour les projets utilisant packages.config, veillez à ce que les références à System.Net.Http soient obligatoires et à ce qu'ils utilisent également NuGet. Quoi qu'il en soit, il peut être utile de supprimer et d'ajouter de nouveau System.Net.Http via NuGet (pour les projets tous le référençant), même s'il est déjà référencé avec NuGet. J'ai trouvé que l'étape 2 peut causer des disjoints quelque part.
  4. Mettez à niveau vers .NET Framework 4.7.2 pour les raisons décrites ici . Vous pouvez le télécharger à partir de ici ou utiliser le programme d'installation de Visual Studio pour VS 2017.
  5. Supprimez all les liaisons d'assemblage de tous les fichiers app.config et Web.config, puis générez votre solution. Les liaisons app.config ne sont plus nécessaires. Les liaisons Web.config seront rajoutées à l'étape suivante, mais leur suppression préalable permet d'éviter toute version obsolète de vos liaisons.
  6. Vous pouvez maintenant avoir d'autres conflits à ce stade. Pour vos projets de site Web ASP.NET, ajoutez les redirections de liaison vers votre Web.config qui vous sont données dans les avertissements. Pour les autres applications .NET Framework, pour les références pour lesquelles vous recevez des avertissements, ajoutez les packages NuGet correspondants dans les projets contenant les avertissements, même si le projet est compilé sans que la référence ne soit ajoutée. Cela oblige le projet à utiliser la version de NuGet et non la version locale de .NET Framework susceptible d'être référencée par un autre package. Cela est dû au croisement entre .NET Framework et .NET Standard, comme le mentionne rsenna la réponse susmentionnée . Après la construction, vous devrez peut-être répéter cette étape pour d'autres références.

Si vous constatez par la suite que vous obtenez des exceptions au moment de l’exécution (même lors des tests d’unités) en raison de différences apparentes après l’ajout d’une référence, supprimez toutes les redirections de liaison du projet de site Web concerné, puis ajoutez à nouveau les suggestions suggérées par étape 6.

J'ai passé beaucoup de temps à essayer de résoudre ce problème de manière méthodique. Je pense donc que les étapes ci-dessus résoudraient pleinement les problèmes de la plupart des gens, bien qu'une certaine réflexion latérale puisse être nécessaire pour les cas inhabituels. Faites-moi savoir si cela fonctionne (ou ne fonctionne pas) pour vous.

6
Neo

Il existe une nouvelle solution à ce problème qui fonctionne à partir du 9 octobre 2018. 

  1. Vous devrez mettre à jour toutes vos références en System.Net.Http vers la dernière version 4.3.4. 
  2. Vous devez installer le package dans votre solution .NET Framework à l'origine du conflit, même s'il ne l'exige pas explicitement.
  3. Si votre projet possède la nouvelle structure de projet, modifiez-la et assurez-vous qu'elle inclut la référence de package suivante:

    <PackageReference Include="System.Net.Http" Version="4.3.4" />
    
  4. Recherchez votre solution et supprimez toute redirection de liaison existante pour System.Net.Http.

    <dependentAssembly> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" /> </dependentAssembly>

  5. Reconstruire, l'avertissement devrait maintenant être parti et votre code devrait construire et fonctionner correctement

0
ObiEff