引用为项目的程序集的运行时版本解析

时间:2013-03-22 10:01:16

标签: .net assemblies versioning

对于我们的企业应用程序,我们有一些被引用为dll的程序集和其他被引用为项目的程序集。

对于被称为dll的那些,我们已经改变了"特定版本"设置为假。

作为项目引用的那些没有这样的设置。如果我们必须将修复程序部署到其中一个引用的项目程序集,那么运行时将如何知道要搜索的版本? 我们还必须部署主项目吗?

1 个答案:

答案 0 :(得分:4)

这里要理解的关键是“特定版本”与应用程序在运行时的行为无关 - 它不会影响.net运行时解析程序集的方式。

所有“特定版本”都告诉Visual Studio(而不是编译器)当项目加载到IDE时,如果DLL引用在可解析位置不可用,是否接受不同版本的相同的DLL。 如果“特定版本”设置为TRUE,并且卸载/删除项目的某些依赖项,则Visual Studio将在解决方案资源管理器中为该引用添加一个感叹号。如果“特定版本”设置为FALSE,并且该DLL的另一个版本可用(假设VS可以找到它),则Visual Studio将返回引用该DLL。当然,这只会在下次构建时显示...您的新输出将引用“后备DLL”。

结果输出是相同的,但是 - 无论您的项目在编译时引用的DLL版本是什么DLL版本在运行时都是必需的 - 它不能被另一个版本替换(当然,我,这里只提到强名称的DLL,而忽略explicitly declared version redirection)。

这对于您的特定场景意味着什么 - 在您没有使用特定版本控制的情况下 - 您需要跟踪项目编译时的依赖项(Excel电子表格中的任何人?哎呀......) - 因为如果您查看源代码控制,您将无法保证项目引用的版本是实际编译到项目中的版本。当然,你应该保留你发布的所有二进制文件的副本,这样你就可以检查这些二进制文件,看看是什么部署给了客户...

要回答您的问题 - 不,您不必部署主项目 - 您只需要在部署它们时了解这些依赖项目的版本,这样您就可以构建兼容的热修复程序。 ..

  • compatible:DLL从外部看起来是相同的,相同的类/属性/方法等
  • hot-fix:保持程序集版本与野外版本相同 -

...或者编写一个新的DLL并执行从旧版本到新版本的程序集绑定重定向。