如何在VSIX项目中摆脱程序包引用冲突

菲尔·乔兰斯

我有一个包含多个项目的解决方案,可以生成一个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版中。所有项目都是根据框架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。

从我对这个错误的了解中,如果它是一个EXE项目,则可以使用文件app.config中的bindingRedirect修复它。

我的理解是,这不适用于DLL项目,因此不适用于Visual Studio扩展(VSIX)项目。

有什么方法可以消除VSIX项目中的这些警告?

(顺便说一句,我还没有更新到版本3.0.0.0,因为该版本仅针对.NET Standard,所以我认为它与Framework 4.7.2不兼容。)

Lance Li-MSFT

有什么方法可以消除VSIX项目中的这些警告?

重现这三个警告的简单方法是创建一个vsix空项目,然后Microsoft.CodeAnalysis version-1.0.0PackageReference格式引用该软件包

生成项目,然后您会收到相同的警告。 在此处输入图片说明

所以我认为您引用的软件包与带有VS2019相关sdk的vsix项目不兼容。请检查此文档,对于VS2019,您应该使用3.0或更高版本。

顺便说一句,我尚未更新到3.0.0.0版本,因为该版本仅针对.NET Standard,因此我认为它与Framework 4.7.2不兼容。

请检查此文档以获取有关.net标准和.net框架之间兼容性的详细信息。

请参阅:使用为.NET Framework 4.6.1项目中的那些版本构建的.NET Standard库存在若干问题。对于需要使用此类库的.NET Framework项目,建议您将项目升级到.NET Framework 4.7.2或更高版本

实际上引用到组件的目标.net standard 2.0.net framework 4.7.2 projects更高是官方推荐的方式。因此,您不必为此担心。

我建议您将Microsoft.CodeAnalysis升级到3.2.0 version,也可能需要更新相关的软件包,例如Microsoft.CodeAnalysis.Analyzers,那么此问题将消失。

希望能帮助到你:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我应如何在VSIX项目中包括包引用

如何在Visual Studio项目中更改NuGet程序包引用以使用Nuget.config

在新的ASP.NET MVC 5项目中更新NuGet程序包引用后,如何解决与JSON.NET的程序集版本冲突?

为Microsoft.CodeAnalysis.Common检测到版本冲突。直接从项目中引用程序包以解决此问题

NuGet程序包引用在项目中导致新文件夹

如何在导入的程序包中引用函数?

如何在AppVeyor和GitVersion中将项目引用为具有特定版本的程序包依赖关系?

“ DNU RESTORE”如何确定依赖项是否是项目引用而不是程序包引用?

我如何将这个引导程序包正确放置到我的Laravel项目中?

SSIS主程序包执行另一个项目中的程序包

从Maven原型生成的项目中的程序包名称

覆盖Google App Engine项目中的程序包库

多个链接的GPRBuild项目中的相同基本程序包

如何在另一个Eclipse工作区中创建的项目中使用另一个程序包中一个程序包的类

如何在引用程序集(NuGet程序包)中的DbContext上触发Update-Database

flutter项目中的包冲突

程序包与同名的现有程序包冲突

如何在Index.html中更改Bower程序包引用路径

如何在Android Studio中使用相同的程序包名称包含2个不同的项目?

我如何在节点程序包库中的根项目目录中要求某些内容?

如何在 HoloLens 模拟器上运行 Windows 应用程序包项目?

如何在 maven 项目中制作包?

如何在Visual Studio 2017项目中安装的_Layout中引用npm软件包?

如何在同一项目中的不同包中引用一个类

Scala:程序包导入冲突

从外部程序包引用本地程序包

如何在apt中查找依赖于某个程序包的程序包?

如何在自己的程序包中使用Laravel程序包?

在Eclipse项目中找出引用的jar的所有冲突包/类