装配版本匹配如何正常工作?

时间:2013-04-09 18:51:27

标签: c# .net

假设我在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版本的参考。哪个程序集将在运行时匹配?什么是装配匹配的实际规则?

2 个答案:

答案 0 :(得分:7)

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

但是,可以通过Assembly Binding Redirection配置。这里会有各种各样的选择,包括:

答案 1 :(得分:5)

  

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

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

Version类的文档一般性地讨论了 关于如何选择版本号的文档。是的,您通常认为构建数的变化是一个非破坏性的变化。并且修改的变化是低风险。选择[AssemblyFileVersion]时考虑的事项。

但是,默认的CLR策略实现[AssemblyVersion]的这种解释,它坚持完全匹配。只有在找到与您编译程序完全相同的DLL时才会感到高兴。这通常很难确保。您可以覆盖此政策并使其更弱,但您应该始终三思而后行。在源代码中有一个非常很长的历史记录,但在实践中并没有很好地解决这个问题。微软非常了解的东西,必须维护持续几十年的代码。 CLR中针对DLL Hell的默认对策很难成为一种摇滚。应该如此。把它缩小到你的位置。