0

此页面http://support.microsoft.com/kb/556041清楚地解释了 AssemblyVersion 和 AssemblyFile 版本之间的区别。

此页面还说明了何时更改两者。我还有一个问题,

假设我交付了一个带有 Assembly 版本 1 的 dot net 组件,现在因为它经常更改,所以我只更改 AssemblyFileVersion。然后我正在复制我的新组件,CLR 将如何知道我的程序集版本不会改变。现在两个组件(旧的和新的)都有相同的 assemblyVersions,那么 CLR 将如何识别要使用的组件呢?

4

1 回答 1

1

CLR 不关注[AssemblyFileVersion]。它只是一个参考编号,例如您可以在 Windows 资源管理器中看到它。通常的方法是在发货前重建程序集时增加它。将小错误修复分开的方法。

大狗是[AssemblyVersion],CLR 非常关注那个。当它在运行时找到程序集时,该版本必须与您构建程序时使用的参考程序集相匹配。如果没有,则 CLR 假定 DLL Hell 发生并拒绝运行该程序。这对 GAC 也很重要,您可以在其中存储多个同名但版本不同的 DLL。这是一个 DLL Hell 对策。

因此,当您在程序集的公共接口中进行重大更改时,增加 [AssemblyVersion]至关重要。如果不重新编译或以其他方式调整以处理更改,那么使用程序集的程序会失败的机会。所以用户会得到一个明确的错误信息,而不是某种难以诊断的异常。或者更糟糕的是,根本没有例外,只是无法诊断的不当行为。

您可以确保 [AssemblyVersion] 递增。实际上这样做并不容易,许多公司在发布更新时只是自动增加 [AssemblyVersion],即使没有更改或更改没有中断。.NET 通过在属性中使用星号 (*) 支持。这样比较安全。但随后附加要求也更新任何依赖程序。这当然不是不寻常的。

于 2013-05-31T12:28:30.133 回答