解决 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
软件包的新发布版本中得到修复,我不确定。
在 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
软件包的新发布版本中得到修复,我不确定。