我对如何更改构建版本和修订版本号时CLR如何处理程序集绑定和从GAC加载有疑问。装配有四个部分[专业]。[次要]。[建造]。[修订]。我知道如果更改Major和Minor,您需要发布者政策才能从GAC找到更新版本的程序集。如果只更改Build或版本号怎么办?在我的下面的场景中,它不适用于构建和修订更新。
在我的应用程序中,我的汇编信息为[1.0。*],因此TFS在每次构建时以递增方式构建具有[1.0.5414.23455]数字的汇编。每天TFS构建项目并生成具有增量构建和修订号的程序集。这是预期的行为,因为我在AssemblyInfo文件中指示了通配符[1.0。*]。
现在,我有一个客户端应用程序,它是根据我的应用程序版本[1.0.5414.23455]构建的。我正在使用安装程序将我的应用程序部署到GAC。现在,如果GAC有应用程序组件版本[1.0.5414.23455],客户端应用程序工作正常,但如果我在GAC中安装较新版本(技术上没有任何改变,只是新的每晚构建)[1.0.5414.23456],客户端应用程序将不会加载此新版本。
我指的是一些Microsoft博客/文档,发现只要Major和Minor数字相同,客户端应用程序就应该能够从GAC加载程序集。从GAC定位程序集时,构建和修订号不是强制性检查。
构建和修订号更改对从GAC定位程序集没有任何影响是否正确?
提前致谢。
答案 0 :(得分:0)
为了避免使用 GAC 上部署的较新组件版本编译复杂性,您可以在web.config或app.config中使用bindingRedirect
,如:
<runtime>
<generatePublisherEvidence enabled="false" />
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MyComponent.Web.UI" publicKeyToken="121fae78165ba3d4" />
<bindingRedirect oldVersion="1.0.5414.23455" newVersion="1.0.5414.23455" />
</dependentAssembly> ...
请注意, oldVersion 属性表示要替换oldVersion="1.0.0.35-1.0.1016.35"
的版本的范围,属性 newVersion 表示替换版本newVersion="2.0.1205.35"
根据您的问题,为什么我们需要bindingRedirect
?
程序集的依赖项是程序集元数据的一部分,您可以使用名为gacutil的东西(它是.NET SDK工具的工具部分)或者我在下面使用.NET Reflector看到这一点。 。由于引用及其版本是程序集的一部分,因此需要编译或更改app.config引用以引用新版本。