程序集版本匹配是如何准确工作的
本文关键字:何准确 工作 版本 程序集 | 更新日期: 2023-09-27 18:08:12
假设我在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版本的参考。哪个程序集将在运行时匹配?装配匹配的实际规则是什么?
如果你的引用需要一个特定的版本,默认情况下,它将在程序集加载时失败,因为该版本不存在。
这可以通过程序集绑定重定向来配置。这里有不同的选项,包括:
- 引用可以说它不关心版本控制,在这种情况下加载最新的版本。
- 你可以通过指定如何重定向绑定的方式来配置你的应用程序。
- 可以使用指定如何处理此问题的发布者策略来设置GAC中的程序集。
哪个程序集将在运行时匹配?
不匹配,你的程序将爆炸。
Version类的文档通常讨论如何选择版本号。是的,您通常认为构建号的更改是非破坏性更改。并且在修订中更改是低风险的。选择[AssemblyFileVersion]时需要考虑的事项。
然而,默认的CLR策略不实现这种对[AssemblyVersion]的解释,它坚持精确的匹配。只有当它找到与您编译程序所用的完全相同的DLL时,它才会感到高兴。这通常不难保证。您可以重写此策略并使其更弱,尽管您应该始终三思而后行。有一个非常长的历史,在源代码中有一些善意的小改变,只是在实践中没有那么好。这是微软非常了解的,必须维护持续几十年的代码。CLR中针对DLL地狱的默认对抗措施像岩石一样坚硬。他们理应如此。把它推到你身上