微软 NuGet 包引用中版本冲突的正确解决方式是什么?

6
在Visual Studio 2019 16.11.5(最新版)中,我已安装“Visual Studio扩展开发”工作负载。
我可以使用它来创建C# VSIX项目。如果这样做,它会像预期的那样构建和运行,并且没有编译器警告或错误。
如果我去到“工具/管理解决方案的NuGet程序包”...我可以看到我已安装了NuGet包Microsoft.VisualStudio.SDK v16.0.206,但最新版本是v16.10.31321.278。
如果我去到“更新”选项卡,我可以选择该包并单击“更新”以获取最新版本。
在我执行此操作后,该项目仍然可以构建和运行,但我会收到有关依赖库版本不兼容性的编译器警告:
“发现“Microsoft.VisualStudio.Validation”的不同版本之间的冲突,无法解决。存在“Microsoft.VisualStudio.Validation,Version=16.9.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”和“Microsoft.VisualStudio.Validation,Version=16.10.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”之间的冲突。选择了“Microsoft.VisualStudio.Validation,Version=16.9.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”,因为它是主要的,而“Microsoft.VisualStudio.Validation,Version=16.10.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”没有被选择。”
有关不兼容性的详细信息还有更多细节,这些细节似乎表明主要程序包引用了16.9.0,而某些依赖库引用了16.10.0。如果我查看project.assets.json,我可以看到构建实际上使用v16.9.32。
因此问题是:什么是正确的操作方法来消除此编译器警告并安全地使用最新的SDK来构建我的VSIX?
经过阅读一些资料,我发现有几个选项。 我可以抑制警告,但我不知道怎么做,因为它没有代码。 我可以不升级该软件包。或者,我可以安装Microsoft.VisualStudio.Validation的特定版本,并使用绑定重定向来消除警告,尽管我不知道该版本应该是什么。 如果程序集使用semver,那么16.10.x似乎是正确的库,而不是构建所用的16.9.32。
1个回答

6
问题在于存在两个不同版本的 Microsoft.VisualStudio.Validation.dll 文件,而VS(MSBuild)无法确认使用哪一个。其中一个来自已安装的NuGet包,另一个来自系统引用(集成在VS中)。当然,VS选择使用主要版本。
解决方案应该是安装单个 Microsoft.VisualStudio.Validation NuGet 包,版本为 16.10.34。是的,它可以在 nuget.org 上找到。
我认为这并不是真正的解决方案,它确实使警告消失了,但我认为,问题应该从 NuGet 包 (Microsoft.VisualStudio.SDK) 的方面进行修复。在安装/更新 Microsoft.VisualStudio.SDK 包期间,应自动安装 Microsoft.VisualStudio.Validation 包的 16.10.XX 版本。也许这将在新发布的 Microsoft.VisualStudio.SDK 包的版本中得到修复,但我不确定。

我认为你说得对,目前的解决方法是选择一个看起来正确的版本,安装它,并希望它能够正常工作。至少这样可以消除警告。和你一样,我希望微软会修复他们的软件包,或者至少发布一些有关这些问题的指南。 - Rich N

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接