2014-12-02 69 views
1

如果构建版本和修订版本号发生更改,CLR如何处理程序集绑定和从GAC加载的问题。大会有四个部分[专业]。[小]。[建筑]。[修订]。我知道如果Major和Minor发生更改,您需要发布者策略才能从GAC中找到较新版本的程序集。如果生成版本或修订版本号更改会怎样?在我的下面的情况下,它不适用于构建和修订更新。定位GAC程序集,如果只有构建版本或修订版本号发生更改

在我的应用程序中,我的程序集信息为[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博客/文档,发现只要主要和次要数字相同,客户端应用程序应该能够从GAC加载程序集。从GAC中查找组件时,构建和修订号码不是强制性检查。

构建版本号和版本号变更对从GAC定位汇编没有任何影响,是否正确?

在此先感谢。

+0

你是如何强大的命名你的程序集? – user1620220 2014-12-02 16:56:54

+0

使用强名称密钥文件和通过Visual Studio属性分配的标准方式。 – 2014-12-02 17:03:14

+1

所有4个数字都是相关的并且被检查。因此,只需更改构建版本或修订版就足以迫使您使用bindingRedirect或发布者策略。您绝对不想在GAC中存储具有自动生成版本号的程序集,这样会造成太多污染和头痛。只能在用户的机器上使用GAC。看看“语义版本控制”。 – 2014-12-02 17:17:33

回答

0

为了避免一些复杂编译与部署在GAC,你可以在你的web.config使用bindingRedirect或类似的app.config更新组件的版本:

<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="2.0.1205.35"

根据您的问题,为什么我们需要bindingRedirect

程序集的依赖关系是程序集元数据的一部分,您可以使用称为gacutil(它是.NET SDK Tools的工具部分)或我下面使用的东西来看到这一点。 NET反射器。由于引用及其版本是程序集的一部分,因此需要编译或更改app.config引用来引用新版本。

enter image description here

+0

是的,我知道这件事,我在我的问题中提到了abt发布者策略。我特别想知道,无论是生成版本号还是版本号更改都会导致GAC程序集加载失败。 – 2014-12-02 17:02:24

+0

您很可能没有针对新版本编译所有组件,并且可能会产生差异 – Dalorzo 2014-12-02 17:03:18

+0

如果技术上没有任何更改,为什么需要编译?由于TFS每晚构建,Assembly只是获得了新版本和修订版本号。这就是全部,而不是单行代码更改。为什么应该要求客户重新编译他们的应用程序,不要做任何小改动。 – 2014-12-02 17:05:08

相关问题