Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här artikeln beskrivs varningen MSB3277.
Meddelandetext
MSB3277: Found conflicts between different versions of 'assembly-name' that could not be resolved.
Beskrivning
Den här varningen inträffar under en version när mer än en version av samma beroende sammansättning refereras i en version av samma projekt. I en .NET-version måste alla komponenter som refereras, direkt eller indirekt via andra refererade komponenter, motsvara samma version. Du bör inte referera till två olika och motstridiga versioner av samma sammansättning när du skapar samma binärfil. Uppgiften ResolveAssemblyReference genererar den här varningen. Uppgiften inspekterar alla refererade sammansättningar och alla sammansättningar som indirekt refereras av dessa sammansättningar och så vidare. Uppgiften fungerar genom processen tills alla sammansättningsreferenser har lösts.
Diagnostisera varningen
Om du vill diagnostisera problemet aktiverar du först diagnostikloggens utdata med hjälp -verbosity:diag
av kommandoradsväxeln och kontrollerar sedan MSBuild-loggfilen med fullständiga diagnostikutdata. För längre utdataloggar i stora projekt bör du överväga att använda kommandoradsväxeln binär logg -bl
och MSBuild Structured Log Viewer för att visa utdata enklare.
I MSBuild 16.x eller senare skrivs de specifika sammansättningsversionerna i konflikt till loggfilen. I tidigare versioner av MSBuild läggs innehållet inte till i loggfilen. Följ i stället kedjan för sammansättningsberoende för att hitta referensen som är i konflikt. Titta på varje samling som ditt projekt refererar till, och sedan de samlingar som de ursprungliga samlingarna refererar till, och så vidare. Följ den här processen tills du identifierar de motstridiga sammansättningsversionerna.
Diagnostikloggen bör identifiera de specifika sammansättningsversioner som är i konflikt och orsakerna till konflikterna. Till exempel en referens till assembly1.dll, som refererar tillassembly2.dll version x, men som också refererar tillassembly2.dll version y. MSBuild kan inte avgöra vilken version som ska användas för sammansättningen.
Följande exempel är ett utdrag från en diagnostiklogg som visar en konflikt mellan två versioner av 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" [].
Du kan också ange MSBuildDebugEngine
miljövariabeln till 1 för att hämta alla möjliga loggar. Mer information finns i Skapa MSBuild för .NET Framework – Loggar.
Lösning / Beslut
Hur du löser det här problemet beror på kraven på projektkonfiguration och sammansättningsberoende:
- Uppdatera versionen av en sammansättning på disken genom att uppgradera eller installera om ett NuGet-paket eller SDK.
- Uppdatera alla paket till de senaste versionerna med
Update-Package -reinstall
kommandot i Package Manager Console för Visual Studio. Mer information finns i Installera om och uppdatera paket. - För projekt med flera versioner av en refererad sammansättning på disk uppdaterar du projektet eller beroendena för att referera till den senaste versionen av den installerade motstridiga sammansättningen. Global Assembly Cache (GAC) kan också vara en källa till en potentiell konflikt, i fall där du refererar till en specifik version av en sammansättning, men GAC åsidosätter den. Mer information finns i Global Assembly Cache.
Externa komponenter
Om konflikten finns i en komponent som inte kommer från Microsoft kanske komponenten inte stöds med den version av den motstridiga sammansättning som du använder i projektet. Kontrollera providern för den andra komponenten för att se om de erbjuder en uppdaterad, kompatibel version. Om en korrigering inte är tillgänglig kan lösningen vara att nedgradera den version av den motstridiga sammansättningen som du refererar till för att matcha den version som den andra komponenten använder.
Binding-omdirigeringar
I vissa fall kan projektet ange eller behöva ange bindningsomdirigeringar, vilket tvingar anrop att använda en angiven version av en sammansättning. Mer information finns i Omdirigera sammansättningsversioner för att förstå hur bindningsomdirigeringar fungerar.
Visual Studio eller inställningar i projektfiler kan aktivera eller inaktivera automatisk omdirigering av bindningar. Mer information finns i Aktivera och inaktivera automatisk omdirigering av bindning. Kontrollera inställningarna och se till att du förstår hur och varför projektet använder bindningsomdirigeringar.
Flera versioner av assembly har lästs in
I avancerade scenarier kan projektet avsiktligt kräva mer än en version av samma sammansättning. Du kan använda särskilda tekniker för att åsidosätta den normala sammanställningsprocessen för att nå ditt mål. Mer information finns i Lösa sammansättningsbelastningar. Säkerställ att du förstår och följer riktlinjerna i Bästa praxis för laddning av sammansättningar.
En guide om hur du löser problem med sammansättningsreferenser finns i Felsöka sammansättningsreferenser och Hur körtidsmiljön hittar sammansättningar.
Gäller för
Alla versioner av MSBuild