Partager via


code de diagnostic MSB3277

Cet article décrit l’avertissement MSB3277.

Texte du message

MSB3277: Found conflicts between different versions of 'assembly-name' that could not be resolved.

Descriptif

Cet avertissement se produit lors d’une compilation lorsque plusieurs versions du même assembly dépendant sont référencées dans une compilation du même projet. Dans une build .NET, toutes les assemblies référencées, directement ou indirectement via d’autres assemblies référencées, doivent correspondre à la même version. Vous ne devez pas référencer deux versions différentes et conflictuelles du même assembly lors de la génération du même binaire. La tâche ResolveAssemblyReference émet cet avertissement. La tâche inspecte tous les assemblys référencés, et tous les assemblys référencés indirectement par ces assemblys, et ainsi de suite. La tâche parcourt le processus jusqu'à résolution de toutes les références d'assembly.

Diagnostiquer l’avertissement

Pour diagnostiquer le problème, commencez par activer la sortie du journal de diagnostic à l’aide du -verbosity:diag commutateur de ligne de commande, puis vérifiez le fichier journal MSBuild avec la sortie complète des diagnostics. Pour les journaux de sortie plus fournis sur des projets volumineux, envisagez d’utiliser le commutateur de ligne de commande -bl du journal binaire et la visionneuse du journal structuré MSBuild pour afficher la sortie plus facilement.

Dans MSBuild 16.x ou version ultérieure, les versions d’assembly spécifiques en conflit sont écrites dans le fichier journal. Dans les versions antérieures de MSBuild, le contenu n’est pas ajouté au fichier journal. Suivez plutôt la chaîne de dépendances de l’assembly pour localiser la référence en conflit. Examinez chaque assembly que votre projet référence, puis les assemblys que les premiers assemblys référencent, et ainsi de suite. Suivez ce processus jusqu’à identifier les versions d’assembly en conflit.

Le journal des diagnostics doit identifier les versions d’assembly spécifiques en conflit et les raisons des conflits. Par exemple, une référence à assembly1.dll, qui fait référence à assembly2.dll version x, mais fait également référence à assembly2.dll version y. MSBuild ne peut pas déterminer la version à utiliser pour l’assembly.

L’exemple suivant est un extrait d’un journal de diagnostic montrant un conflit entre deux versions de StreamJsonRpc:

There was a conflict between "StreamJsonRpc, Version=2.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" and "StreamJsonRpc, Version=2.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
    "StreamJsonRpc, Version = 2.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" was chosen because it was primary and "StreamJsonRpc, Version=2.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" was not.
    References which depend on "StreamJsonRpc, Version = 2.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" [C:\Users\user\.nuget\packages\streamjsonrpc\2.1.74\lib\netstandard2.0\StreamJsonRpc.dll].
    C:\Users\user\.nuget\packages\streamjsonrpc\2.1.74\lib\netstandard2.0\StreamJsonRpc.dll
          Project file item includes which caused reference "C:\Users\user\.nuget\packages\streamjsonrpc\2.1.74\lib\netstandard2.0\StreamJsonRpc.dll".
            C:\Users\user\.nuget\packages\streamjsonrpc\2.1.74\lib\netstandard2.0\StreamJsonRpc.dll
        C:\Users\user\.nuget\packages\microsoft.servicehub.framework\2.0.72\lib\netstandard2.0\Microsoft.ServiceHub.Framework.dll
          Project file item includes which caused reference "C:\Users\user\.nuget\packages\microsoft.servicehub.framework\2.0.72\lib\netstandard2.0\Microsoft.ServiceHub.Framework.dll".
            C:\Users\user\.nuget\packages\microsoft.servicehub.framework\2.0.72\lib\netstandard2.0\Microsoft.ServiceHub.Framework.dll
            C:\Users\user\.nuget\packages\microsoft.visualstudio.shell.15.0\16.4.29318.21\lib\net472\Microsoft.VisualStudio.Shell.15.0.dll
            C:\Users\user\.nuget\packages\microsoft.visualstudio.datadesign.common\16.0.28321-alpha\lib\net472\Microsoft.VisualStudio.DataDesign.Common.dll
            C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll
            C:\Users\user\.nuget\packages\microsoft.visualstudio.projectsystem\16.2.133-pre\lib\net472\Microsoft.VisualStudio.ProjectSystem.VS.dll
            C:\Users\user\.nuget\packages\microsoft.visualstudio.shell.design\16.0.28316-pre\lib\net45\Microsoft.VisualStudio.Shell.Design.dll
            C:\Users\user\.nuget\packages\microsoft.vsdesigner\16.0.28321-alpha\lib\net472\Microsoft.VSDesigner.dll
        C:\Users\user\.nuget\packages\microsoft.visualstudio.language\16.0.428\lib\net472\Microsoft.VisualStudio.Language.dll
          Project file item includes which caused reference "C:\Users\user\.nuget\packages\microsoft.visualstudio.language\16.0.428\lib\net472\Microsoft.VisualStudio.Language.dll".
            C:\Users\user\.nuget\packages\microsoft.visualstudio.language\16.0.428\lib\net472\Microsoft.VisualStudio.Language.dll
            C:\Users\user\.nuget\packages\microsoft.visualstudio.editor\16.0.428\lib\net472\Microsoft.VisualStudio.Editor.dll
            C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll
        C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll
          Project file item includes which caused reference "C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll".
            C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll
        C:\Users\user\.nuget\packages\microsoft.visualstudio.utilities\16.4.29317.144\lib\net46\Microsoft.VisualStudio.Utilities.dll
          Project file item includes which caused reference "C:\Users\user\.nuget\packages\microsoft.visualstudio.utilities\16.4.29317.144\lib\net46\Microsoft.VisualStudio.Utilities.dll".
            C:\Users\user\.nuget\packages\microsoft.visualstudio.utilities\16.4.29317.144\lib\net46\Microsoft.VisualStudio.Utilities.dll
            C:\Users\user\.nuget\packages\microsoft.visualstudio.imaging\16.4.29317.144\lib\net472\Microsoft.VisualStudio.Imaging.dll
            C:\Users\user\.nuget\packages\microsoft.visualstudio.languageservices\3.2.0-beta4-19359-03\lib\net472\Microsoft.VisualStudio.LanguageServices.dll
            C:\Users\user\.nuget\packages\microsoft.visualstudio.shell.15.0\16.4.29318.21\lib\net472\Microsoft.VisualStudio.Shell.15.0.dll
            C:\Users\user\.nuget\packages\microsoft.visualstudio.datadesign.common\16.0.28321-alpha\lib\net472\Microsoft.VisualStudio.DataDesign.Common.dll
            C:\Users\user\.nuget\packages\microsoft.visualstudio.projectsystem\16.2.133-pre\lib\net472\Microsoft.VisualStudio.ProjectSystem.VS.dll
            C:\Users\user\.nuget\packages\microsoft.visualstudio.shell.design\16.0.28316-pre\lib\net45\Microsoft.VisualStudio.Shell.Design.dll
            C:\Users\user\.nuget\packages\microsoft.visualstudio.shell.framework\16.4.29318.21\lib\net472\Microsoft.VisualStudio.Shell.Framework.dll
            C:\Users\user\.nuget\packages\microsoft.vsdesigner\16.0.28321-alpha\lib\net472\Microsoft.VSDesigner.dll
    References which depend on "StreamJsonRpc, Version = 2.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" [].

Vous pouvez également définir la variable d’environnement MSBuildDebugEngine sur 1 pour obtenir tous les journaux possibles. Pour plus d’informations, consultez Création de MSBuild pour .NET Framework - Journaux.

Résolution

La façon dont vous résolvez ce problème dépend des exigences de configuration de votre projet et de vos dépendances d’assembly :

  • Mettez à jour la version d’un assembly sur le disque en mettant à niveau ou en réinstallant un package NuGet ou un Kit de développement logiciel (SDK).
  • Mettez à jour tous les packages vers les dernières versions avec la Update-Package -reinstall commande dans la console du Gestionnaire de package pour Visual Studio. Pour plus d’informations, consultez Réinstaller et mettre à jour des packages.
  • Pour les projets avec plusieurs versions d’un assembly référencé sur le disque, mettez à jour le projet ou les dépendances pour référencer la dernière version de l’assembly en conflit installé. Le Global Assembly Cache (GAC) peut également être une source de conflit potentiel, dans les cas où vous référencez une version spécifique d’un assembly, mais le GAC le remplace. Pour plus d’informations, consultez Global Assembly Cache.

Composants externes

Si le conflit se trouve dans un composant non-Microsoft, le composant peut ne pas être pris en charge avec la version de l’assembly en conflit que vous utilisez dans votre projet. Vérifiez le fournisseur de l’autre composant pour voir s’ils offrent une version mise à jour et compatible. Si aucun correctif n’est disponible, la solution peut être de rétrograder la version de l’assembly en conflit que vous référencez pour correspondre à la version utilisée par l’autre composant.

Redirections de liaison

Dans certains cas, votre projet peut spécifier ou nécessiter de spécifier des redirections de liaison, ce qui contraint les appels à utiliser une version spécifiée d’un assembly. Pour plus d’informations, consultez Redirection des versions d’assembly afin de comprendre comment fonctionnent les redirections de liaison.

Visual Studio ou les paramètres dans les fichiers projet peuvent activer ou désactiver la redirection automatique de liaison. Pour plus d’informations, consultez Activer et désactiver la redirection de liaison automatique. Vérifiez les paramètres et vérifiez que vous comprenez comment et pourquoi votre projet utilise des redirections de liaison.

Plusieurs versions d'assembly chargées

Dans les scénarios avancés, votre projet peut nécessiter intentionnellement plusieurs versions du même assembly. Vous pouvez utiliser des techniques spéciales pour remplacer le processus de chargement d'assemblage normal afin d'atteindre votre objectif. Pour plus d'informations, consultez Résoudre les chargements d'assemblage. Veillez à comprendre et à suivre les instructions de Meilleures pratiques pour le chargement d'assemblies.

Pour obtenir un guide sur la résolution des problèmes liés aux références d’assembly, consultez Résoudre les problèmes liés aux références d’assembly et comment le runtime localise les assemblys.

S’applique à

Toutes les versions de MSBuild