У меня есть решение с несколькими проектами, которое создает пакет Visual Studio.
Некоторые проекты и пакеты Nuget показаны ниже. Расширение Visual Studio верхнего уровня — MultiLanguageWPF.
MultiLanguageWPF
|
+-- MultiLanguageLegacy
| | Nuget: Microsoft.CodeAnalysis.Analyzers Version 1.0.0
| |
| +-- MultiLangCodeParser
| | Nuget: Microsoft.CodeAnalysis.Analyzers Version 1.0.0
| | Nuget: Microsoft.CodeAnalysis.Compilers Version 1.0.0
| |
+---+-- MultiLangCommon
Nuget: Microsoft.CodeAnalysis Version 1.0.0
Nuget: Microsoft.CodeAnalysis.Analyzers Version 1.0.0
Все эти пакеты Nuget включены в версию 1.0.0. Все проекты построены на основе Framework 4.7.2.
Этот вопрос касается трех предупреждений, которые генерируются для проекта MultiLanaguageWPF:
Обнаружены конфликты между разными версиями «Microsoft.CodeAnalysis», которые не удалось разрешить. Эти ссылочные конфликты перечислены в журнале сборки, если уровень детализации журнала установлен на подробный.
Обнаружены конфликты между различными версиями «Microsoft.CodeAnalysis.VisualBasic», которые не удалось разрешить. Эти ссылочные конфликты перечислены в журнале сборки, если уровень детализации журнала установлен на подробный.
Обнаружены конфликты между разными версиями «Microsoft.CodeAnalysis.CSharp», которые не удалось разрешить. Эти ссылочные конфликты перечислены в журнале сборки, если уровень детализации журнала установлен на подробный.
Пакеты Microsoft.CodeAnalysis.VisualBasic и Microsoft.CodeAnalysis.CSharp являются зависимостями пакета Microsoft.CodeAnalysis.Compilers.
Эти три предупреждения генерируются для проекта MultiLanaguageWPF, который на самом деле не использует эти пакеты. Очевидно, что все упомянутые библиотеки DLL должны быть включены в проект верхнего уровня и в конечном итоге упакованы в установку VSIX, поэтому я думаю, что это имеет смысл.
Как было предложено в предупреждающих сообщениях, я установил уровень детализации журнала. Для пакета Microsoft.CodeAnalysis это часть того, что я вижу.
16> Primary reference "Microsoft.CodeAnalysis, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35".
16> Resolved file path is "C:\Users\Phil\.nuget\packages\microsoft.codeanalysis.common\1.0.0\lib\net45\Microsoft.CodeAnalysis.dll".
16> Reference found at search path location "{RawFileName}".
16> Found related file "C:\Users\Phil\.nuget\packages\microsoft.codeanalysis.common\1.0.0\lib\net45\Microsoft.CodeAnalysis.xml".
16> This reference is not "CopyLocal" because at least one source item had "Private" set to "false" and no source items had "Private" set to "true".
16> The ImageRuntimeVersion for this reference is "v4.0.30319".
16> Unified Dependency "Microsoft.CodeAnalysis, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35".
16> Using this version instead of original version "1.0.0.0" in "C:\MultiLang_Version_7_1\VS2013\MultiLang\bin\Debug\MultiLanguageLegacy.dll" because AutoUnify is 'true'.
16> Using this version instead of original version "1.0.0.0" in "C:\Users\Phil\.nuget\packages\microsoft.codeanalysis.csharp\1.0.0\lib\net45\Microsoft.CodeAnalysis.CSharp.dll" because AutoUnify is 'true'.
16> Using this version instead of original version "1.0.0.0" in "C:\Users\Phil\.nuget\packages\microsoft.codeanalysis.csharp.workspaces\1.0.0\lib\net45\Microsoft.CodeAnalysis.CSharp.Workspaces.dll" because AutoUnify is 'true'.
16> Using this version instead of original version "1.0.0.0" in "C:\Users\Phil\.nuget\packages\microsoft.codeanalysis.visualbasic\1.0.0\lib\net45\Microsoft.CodeAnalysis.VisualBasic.dll" because AutoUnify is 'true'.
16> Using this version instead of original version "1.0.0.0" in "C:\Users\Phil\.nuget\packages\microsoft.codeanalysis.visualbasic.workspaces\1.0.0\lib\net45\Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll" because AutoUnify is 'true'.
16> Using this version instead of original version "1.0.0.0" in "C:\Users\Phil\.nuget\packages\microsoft.codeanalysis.workspaces.common\1.0.0\lib\net45\Microsoft.CodeAnalysis.Workspaces.Desktop.dll" because AutoUnify is 'true'.
16> Using this version instead of original version "1.0.0.0" in "C:\Users\Phil\.nuget\packages\microsoft.codeanalysis.workspaces.common\1.0.0\lib\net45\Microsoft.CodeAnalysis.Workspaces.dll" because AutoUnify is 'true'.
16> Using this version instead of original version "1.0.0.0" in "C:\Users\Phil\.nuget\packages\microsoft.visualstudio.languageservices\1.0.0\lib\net45\Microsoft.VisualStudio.LanguageServices.dll" because AutoUnify is 'true'.
16> Using this version instead of original version "1.0.0.0" in "C:\MultiLang_Version_7_1\VS2013\MultiLang\bin\Debug\MultiLangCommon.dll" because AutoUnify is 'true'.
16> Using this version instead of original version "1.0.0.0" in "C:\MultiLang_Version_7_1\VS2013\MultiLang\bin\Debug\MultiLangCodeParser.dll" because AutoUnify is 'true'.
16> Could not resolve this reference. Could not locate the assembly "Microsoft.CodeAnalysis, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.
Похоже, что это механизм AutoUnify, из-за которого он выбирает версию 3.0.0.0 вместо версии 1.0.0.0.
Из того, что я узнал об этой ошибке, можно было бы исправить ее с помощью bindingRedirect в файле app.config, если бы это был EXE-проект.
Насколько я понимаю, это не работает для проекта DLL и, следовательно, не для проекта расширения Visual Studio (VSIX).
Можно ли как-то избавиться от этих предупреждений в проекте VSIX?
(Кстати, я не обновился до версии 3.0.0.0, потому что эта версия предназначена только для .NET Standard, поэтому я предполагаю, что она несовместима с Framework 4.7.2.)