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

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

在 Visual Studio 2019 16.11.5(最新)我安装了 'Visual Studio extension development' 工作负载。

我可以使用它来创建 C# VSIX 项目。如果我这样做,它会按照您的预期正常构建和运行,并且没有编译器警告或错误。

如果我去 Tools/Manage NuGet Packages 寻求解决方案...我可以看到我安装了 NuGet 包 Microsoft.VisualStudio.SDK v16.0.206,但最新版本是 v16.10.31321.278。

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

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

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.org.

上可用

我认为这不是一个真正的解决方案,它确实让警告消失了,但在我看来,这个问题应该从 NuGet package(Microsoft.VisualStudio.SDK) 端解决。在 Microsoft.VisualStudio.SDK 包的 installation/updating 期间,Microsoft.VisualStudio.Validation 包的版本 16.10.XX 也应该自动安装。也许这会在 Microsoft.VisualStudio.SDK 软件包的新发布版本中得到修复,我不确定。