11

假设我在 GAC 中有版本为 1.1.1.5、1.1.5.1、1.1.6.2、1.2.1.1 和 2.1.2.1 的程序集。我的应用程序有 1.1.3.0 版本的参考。哪个程序集将在运行时匹配?装配匹配的实际规则是什么?

4

2 回答 2

6

如果您的参考需要特定版本,默认情况下,它会在程序集加载时失败,因为该版本不存在。

但是,这可以通过Assembly Binding Redirection进行配置。这里有多种选择,包括:

于 2013-04-09T18:55:26.700 回答
5

哪个程序集将在运行时匹配?

没有一个会匹配,你的程序会爆炸。

Version 类的文档一般性地讨论了如何选择版本号。是的,您通常认为内部版本号的更改是非破坏性更改。并且在修订中进行更改是低风险的。选择 [AssemblyFileVersion] 时要考虑的事项。

但是,默认的 CLR 策略并没有实现对 [AssemblyVersion] 的这种解释,它坚持完全匹配。只有当它找到您编译程序所用的完全相同的 DLL 时,它才会感到高兴。这通常不难保证。您可以覆盖此策略并使其更弱,尽管您应该始终三思而后行。源代码中精心设计的微小更改由来已久,但在实践中并没有那么好。微软非常了解的东西,必须维护持续数十年的代码。CLR 中针对 DLL Hell 的默认对策非常困难。正如他们应该的那样。把它交给你。

于 2013-08-11T16:24:11.257 回答