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



在Visual Studio 2019 16.11.5(最新版本(中,我安装了"Visual Studio扩展开发"工作负载。

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

如果我转到工具/管理NuGet包以获得解决方案。。。我可以看到我安装了NuGet包Microsoft.VisualStudio.SDK v16.0.206,但最新版本是v16.10.3132.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.ValidationNuGet软件包,版本为16.10.34。是的,它在nuget.org上可用。

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

最新更新