2 votes

Mise à jour du .NET Framework laisse la construction avec des avertissements "Conflit rencontré entre ..."

Je viens de mettre à jour un projet ASP.NET MVC 5 de .NET Framework 4.5.1 à 4.6.1. J'ai également mis à jour les packages NuGet.

Maintenant, lorsque je construis le projet, je vois plusieurs douzaines d'avertissements de Conflit rencontré entre .... J'ai inclus plusieurs de ces entrées provenant de la fenêtre de sortie de VS :

1>_HandlePackageFileConflicts: 
1>  Conflit rencontré entre 'Reference:Microsoft.Win32.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL' et 'Reference:Microsoft.Win32.Primitives'.  Je choisis 'Reference:Microsoft.Win32.Primitives' car AssemblyVersion '4.0.3.0' est supérieure à '4.0.2.0'. 
1>  Conflit rencontré entre 'Reference:System.AppContext, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL' et 'Reference:System.AppContext'.  Je choisis 'Reference:System.AppContext' car AssemblyVersion '4.1.2.0' est supérieure à '4.0.0.0'. 
1>  Conflit rencontré entre 'Reference:System.Console, Version=4.0.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL' et 'Reference:System.Console'.  Je choisis 'Reference:System.Console' car AssemblyVersion '4.0.2.0' est supérieure à '4.0.1.1'. 
1>  Conflit rencontré entre 'Reference:System.Diagnostics.TraceSource, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL' et 'Reference:System.Diagnostics.TraceSource'.  Je choisis 'Reference:System.Diagnostics.TraceSource' car AssemblyVersion '4.0.2.0' est supérieure à '4.0.1.0'. 
1>  Conflit rencontré entre 'Reference:System.Globalization.Calendars, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL' et 'Reference:System.Globalization.Calendars'.  Je choisis 'Reference:System.Globalization.Calendars' car AssemblyVersion '4.0.3.0' est supérieure à '4.0.2.0'.

Le fichier packages.config contient ce qui semble être des références de version correctes :

Et le dossier packages/ contient également les versions correctes. 4.3.0 et 4.5.0 pour les 2 entrées ci-dessus.

Comment résoudre ces conflits ?

* *

MISE À JOUR

Il y a une Référence à Microsoft.Win32.Primitives avec un Chemin de

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\Microsoft.Win32.Primitives.dll

La référence est configurée lorsque le package NuGet est installé. Je ne comprends pas pourquoi NuGet installe la version 4.3.0 et ajoute une Référence dans le projet à une extension qui est en version 4.0.2.0 et pourtant résout le conflit en utilisant la version 4.3.0 car elle est plus récente.

Ce comportement est déroutant. Cela fonctionne bien sur mon PC local, mais j'ai un problème subtil sur l'un des serveurs de staging après la publication. Je soupçonne qu'il y a un ou plusieurs packages où ce conflit n'est pas résolu correctement sur le serveur de staging.

J'essaie de comprendre comment éliminer cette sélection au hasard de ces dépendances. :S

2voto

Leo Liu-MSFT Points 21360

Mise à jour du framework .NET laisse la génération avec des avertissements de "Conflit entre …"

Cela est dû à :

Ceci est dû à l'introduction du support pour NETStandard 2.0. Nous intégrons de nouvelles assemblées dans les projets de bureau NET 4.6.1 et ultérieurs afin d'ajouter le support pour netstandard2.0. Nous le faisons maintenant dans les cibles au lieu de paquets car il n'est plus nécessaire de référencer un paquet pour construire une bibliothèque netstandard. Cette intégration se produit chaque fois que nous voyons une bibliothèque netstandard1.5 ou supérieure référencée (voir dotnet/sdk#1386).

Vérifiez ce fil de discussion pour plus de détails.

Pour résoudre ce problème, vous pourriez ajouter une redirection de liaison à ces références ou simplement utiliser des références standard à Microsoft.Win32.Primitives sans importer de package Nuget pour Microsoft.Win32.Primitives.

Voir System.Net.Http v4.2.0.0 étant copié/chargé à partir des outils MSBuild pour quelques détails.

J'espère que cela vous aidera.

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