NuGet包版本与引用版本不匹配。

11

我一直在调试我的程序,发现几个NuGet包的版本与"引用属性"中显示的版本不匹配。例如,在查看已安装的NuGet包时,我有以下内容:

enter image description here

当我选择“引用组”下的log4net(在“解决方案资源管理器”中)时,我看到了这个:

enter image description here

NuGet报告安装版本为2.0.5,而引用报告的版本为1.2.15。

有人能解释一下这是为什么以及是否有问题吗?我的Newtonsoft.Json也有同样的问题,其中NuGet显示版本为8.0.3,而引用显示版本为8.0.0。


下载了Log4Net NuGet包(= dll和其他文件)版本2.0.5,并验证了Log4Net的DLL版本为1.2.15.0。您没有Log4Net问题;不同的东西有不同的版本。Newtonsoft.Json也是如此。 - Jeroen Heier
1个回答

20
这里的技巧在于你在比较不同的内容。
Nuget会显示可用包及其包版本号。这是包所有者在Nuget规范文件中的version字段中声明的内容。该版本在Nuget完成从外部文件获取到您的项目后,就没有任何意义或影响了。它也与包内实际包含的内容没有直接关系。
另一方面,引用属性查看dll,不关心它来自哪个程序包。显示的版本号是编译时使用代码中的AssemblyVersionAttribute属性嵌入到DLL中的DLL版本号。这是在运行时查找和加载所引用逻辑时实际使用的版本号。
通常情况下,包版本号和DLL版本号应该匹配,但没有强制执行此规则。即使如此,在包中可能包含多个以不同版本编号命名的dll和其他文件,这会变得棘手。
对于这种特定情况,我不知道所有者为什么要做出这种差异,也不知道是否符合其版本控制逻辑。如果没有记录,您可以发送消息并询问其含义。
好的一点是,略微混淆一下,如果DLL能够正常工作并通过QA测试,则包中的版本号差异在实践中不重要。
注:请注意,仅在第3个数字上的版本号差异对于使用语义化版本控制规范的库是常见的,其中第三个组件增加表示非破坏性的错误修复版本。保持相同的AssemblyVersion(例如:"8.0.0"用于Newtonsoft.Json)允许就地升级,而无需重新编译所有引用先前版本的具有相同主次版本(8.0.0、8.0.1、8.0.2)的程序集。

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