Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается предупреждение MSB3277.
Текст сообщения
MSB3277: Found conflicts between different versions of 'assembly-name' that could not be resolved.
Описание
Это предупреждение возникает во время сборки, когда в сборке того же проекта упоминается более одной версии одной и той же зависимой сборки. В сборке .NET все сборки, на которые ссылки имеются напрямую или косвенно через другие сборки, должны сопоставляться с одной и той же версией. При создании одного двоичного файла не следует ссылаться на две разные и конфликтующие версии одной сборки. Задача ResolveAssemblyReference выдает это предупреждение. Задача проверяет все указанные сборки и все сборки, на которые косвенно ссылаются те сборки, и так далее. Задача последовательно проходит процесс, пока все ссылки на сборку не будут устранены.
Диагностика предупреждения
Чтобы диагностировать проблему, сначала включите выходные данные журнала диагностики с помощью -verbosity:diag переключателя командной строки, а затем проверьте файл журнала MSBuild с полными выходными данными диагностики. Для более длинных выходных журналов больших проектов рекомендуется использовать ключ командной строки двоичного журнала -bl и средство просмотра структурированных журналов MSBuild, чтобы облегчить просмотр выходных данных.
В MSBuild 16.x или более поздней версии определенные версии сборки в конфликте записываются в файл журнала. В более ранних версиях MSBuild содержимое не добавляется в файл журнала. Вместо этого следуйте цепочке зависимостей сборки, чтобы найти конфликтующую ссылку. Изучите каждую сборку, на которую ссылается ваш проект, а затем сборки, на которые ссылаются первые сборки, и так далее. Следуйте этому процессу, пока не определите конфликтующие версии сборки.
Журнал диагностики должен определить определенные версии сборок, которые находятся в конфликте, и причины конфликтов. Например, ссылка на assembly1.dll, основывающаяся на assembly2.dll версии x, но также относящаяся к assembly2.dll версии y. MSBuild не может определить, какая версия используется для сборки.
В следующем примере показан фрагмент из журнала диагностики, показывающий конфликт между двумя версиями 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" [].
Можно также задать для переменной среды MSBuildDebugEngine значение 1, чтобы получить все возможные журналы. Дополнительные сведения см. в статье "Создание MSBuild для .NET Framework — журналы".
Резолюция
Как устранить эту проблему, зависит от требований к конфигурации проекта и зависимостей сборки:
- Обновите версию сборки на диске, обновив или переустановив пакет NuGet или пакет SDK.
- Обновите все пакеты до последних версий, используя команду
Update-Package -reinstallв консоли диспетчера пакетов Visual Studio. Дополнительные сведения см. в разделе "Переустановка и обновление пакетов". - Для проектов с несколькими версиями указанной сборки на диске обновите проект или зависимости, чтобы ссылаться на последнюю версию установленной конфликтующей сборки. Глобальный кэш сборок (GAC) также может быть источником потенциального конфликта, в случаях, когда вы ссылаетесь на определенную версию сборки, но GAC переопределяет ее. Дополнительные сведения см. в разделе "Глобальный кэш сборок".
Внешние компоненты
Если конфликт находится в компоненте, отличном от Майкрософт, компонент может не поддерживаться с версией конфликтующей сборки, которую вы используете в проекте. Проверьте поставщика другого компонента, чтобы узнать, предлагает ли они обновленную совместимую версию. Если исправление недоступно, решением может быть понижение версии конфликтующей сборки, на которую вы ссылаетесь, чтобы она соответствовала версии, используемой другим компонентом.
Перенаправления привязки
В некоторых случаях ваш проект может потребовать или нуждаться в указании перенаправлений привязки, которые принудительно назначают использование определённой версии сборки. Дополнительные сведения см. в статье "Перенаправление версий сборок ", чтобы понять, как работают перенаправления привязок.
Visual Studio или параметры в файлах проекта могут включать или отключать автоматическое перенаправление привязки. Дополнительные сведения см. в разделе "Включение и отключение автоматического перенаправления привязки". Проверьте параметры и убедитесь, что вы понимаете, как и почему проект использует перенаправления привязок.
Загружено несколько версий сборок
В расширенных сценариях проект может намеренно требовать несколько версий одной сборки. Для достижения цели можно использовать специальные методы, чтобы переопределить обычный процесс загрузки сборок. Дополнительные сведения см. в разделе "Разрешение загрузки сборок". Не забудьте понять и следовать рекомендациям в лучшие практики по загрузке сборок.
Руководство по устранению проблем со ссылками на сборки см. в статье "Устранение неполадок со ссылками на сборки " и " Как среда выполнения находит сборки".
Применимо к
Все версии MSBuild