CLR如何识别程序集版本更改?

时间:2013-05-31 09:05:52

标签: .net version .net-assembly

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

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

假设我发布了一个带有程序集版本ver 1的点网组件,现在因为它经常更改我只更改AssemblyFileVersion。然后我正在复制我的新组件,CLR将如何知道我的程序集版本没有被更改。现在两个组件(旧的和新的)都具有相同的assemblyVersions,那么CLR将如何识别要使用的组件?

1 个答案:

答案 0 :(得分:1)

CLR 注意[AssemblyFileVersion]。它只是一个参考号,您可以在Windows资源管理器中看到它。通常的方法是在发运之前重建装配时增加它。保持小错误修复的方法是分开的。

大狗是[AssemblyVersion],CLR支付很多的注意力。当它在运行时找到程序集时,该版本必须与您构建程序的引用程序集匹配。如果没有,那么CLR假定DLL Hell发生并拒绝运行程序。对于GAC来说,这也很重要,您可以使用相同的名称但不同的版本存储多个DLL。这是一个DLL地狱对策。

因此,当您在程序集的公共接口中进行重大更改时,增加[AssemblyVersion]是必需。如果不重新编译或以其他方式调整以处理更改,那么使程序使用程序集的机会会失败。因此用户将获得明确的错误消息,而不是某种难以诊断的异常。或者更糟糕的是,除了不可忽视的不当行为外,完全没有例外。

由您来确保[AssemblyVersion]增加。实际上这样做并不容易,许多公司只是在发布更新时自动增加[AssemblyVersion],即使没有更改或更改没有中断。 .NET支持,在属性中使用星号(*)。这样更安全。但随后还需要更新任何相关程序。这肯定不寻常。