4

我正在尝试完全了解 .NET 中的程序集版本和强名称

我发现This Assembly Versioning Article指出只有 Major.Minor.Build 用于版本匹配。我找不到任何可以确认/否认这一点的东西。

程序集版本格式...修订版:
具有相同名称、主要和次要版本号但不同修订版的程序集旨在完全互换。这适用于修复先前发布的程序集中的安全漏洞。

MS 文章说:

程序集版本号是程序集标识的一部分,在绑定到程序集和版本策略中起着关键作用……版本检查仅发生在强名称程序集上。

这是否意味着说 1.0.0.0 和 1.0.0.1 在强名称环境中可以互换,但 1.0.1.1 不是?

请问什么是确定的答案?

4

2 回答 2

3

在比较版本时,程序集的AssemblyVersion-attribute 正在被完全评估。这意味着更改版本号的一部分将导致不匹配的程序集。

解决此问题的一种方法是让 -AssemblyVersion属性始终保持不变,例如设置为[AssemblyVersion("1.2.3.0")]并使用- 属性来AssemblyFileVersion更改版本,例如修订版,例如[AssemblyFileVersion("1.2.3.20120909")]. 这使您可以在不更新所有引用的情况下更新强命名程序集的版本。

于 2012-09-10T08:56:11.050 回答
2

我在链接的文章中没有找到任何内容,说明只有 Major.Minor.Build 用于版本匹配。事实上,一个版本的所有四个组件都被使用了。

关键点是intended to be interchangeable。它们是否实际上可以互换取决于作者,谁可以自由地尊重或忽略 MS 指南。

安装在 GAC 中的共享程序集的供应商可以提供发布者策略文件以从旧版本的程序集重定向到新版本的程序集。只有当新版本向后兼容旧版本时,他才应该这样做。

于 2012-09-10T09:01:22.027 回答