繁体   English   中英

解决 Microsoft NuGet 包引用中的版本冲突的正确方法是什么?

[英]What is the Correct Way to Resolve Versioning Conflicts in Microsoft NuGet Package References?

在 Visual Studio 2019 16.11.5(最新)中,我安装了“Visual Studio 扩展开发”工作负载。

我可以用它来创建一个 C# VSIX 项目。 如果我这样做,它会像您期望的那样构建和运行良好,并且没有编译器警告或错误。

如果我转到工具/管理 NuGet 包寻求解决方案...我可以看到我安装了 NuGet 包 Microsoft.VisualStudio.SDK v16.0.206,但最新版本是 v16.10.31321.278。

如果我转到“更新”选项卡,我可以选择软件包并单击“更新”以获取最新版本。

执行此操作后,该项目仍会构建并运行,但我收到有关依赖库版本不兼容的编译器警告:

Found conflicts between different versions of "Microsoft.VisualStudio.Validation" that could not be resolved. There was a conflict between "Microsoft.VisualStudio.Validation, Version=16.9.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" and "Microsoft.VisualStudio.Validation, Version=16.10.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". "Microsoft.VisualStudio.Validation, Version=16.9.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" was chosen because it was primary and "Microsoft.VisualStudio.Validation, Version=16.10.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" was not.

有更多关于不兼容的细节,似乎是说主包引用了 16.9.0,一些依赖库引用了 16.10.0。 如果我查看 project.assets.json,我可以看到构建实际上使用了 v16.9.32。

所以问题是:删除此编译器警告并安全地使用最新的 SDK 来构建我的 VSIX 的正确做法是什么?

阅读本文后,我看到了一些选项。 我可以取消警告,但由于它没有代码,我看不到如何。 我无法升级包。 或者我可以安装特定版本的 Microsoft.VisualStudio.Validation 并使用绑定重定向来消除警告,尽管我不知道版本应该是什么。 如果程序集使用 semver,则 16.10.x 似乎是正确的库,而不是构建使用的 16.9.32。

问题是有两个不同版本的Microsoft.VisualStudio.Validation.dll文件,VS(MSBuild) 无法确认使用哪个版本。 一个来自已安装的 NuGet 包,另一个来自系统参考(集成在 VS 中)。 当然,VS 选择使用主要的。

解决方案应该是安装一个Microsoft.VisualStudio.Validation NuGet 包,版本16.10.34 是的,它可以在nuget.orgnuget.org

我认为这不是一个真正的解决方案,它确实使警告消失,但在我看来,该问题应该从 NuGet 包( Microsoft.VisualStudio.SDK )方面解决。 在安装/更新Microsoft.VisualStudio.SDK包的过程中,还应自动安装Microsoft.VisualStudio.Validation包的 16.10.XX 版本。 也许这会在Microsoft.VisualStudio.SDK包的新发布版本中得到修复,我不确定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM