正在更新GAC dll



我在GAC中注册了一个DLL,其中有一个错误(v4.2.0)。

因此,我修复了这个错误,只更新了文件版本(v4.2.1)(保留了程序集版本v4.2.0),并构建了一个新的MSI包。

问题是GAC中没有安装DLL。我通过右键单击C:WindowsMicrosoft.NETassemblyGAC_MSILMyDLLv4.0_4.2.0.0__2269313d92725976中的DLL验证了这一点,并检查了文件版本,它仍然是v4.2.0。在C:WindowsMicrosoft.NETassemblyGAC_MSILMyDLL下也没有创建其他文件夹。

但是如果我卸载第一个版本,然后安装新的DLL,它可以安装在GAC中。

我是不是走错路了?我们的应用程序设置为使用特定版本,因此仅创建程序集版本v4.3.0并将其安装在GAC中是行不通的。

更新

我找到了关于出版商政策的文章(http://support.microsoft.com/kb/891030)并且正在尝试这样做。我已生成策略程序集。但是当我试图将Visual Studio添加到安装项目时,它崩溃了=(

我还尝试将其作为内容文件添加到主项目中(然后将内容文件添加至GAC)。但随后它抱怨大会没有得到签署。

所以我还是被卡住了。

更新[AssemblyFileVersion]以修复错误通常是正确的方法,尽管如果对GAC中的程序集进行更新会变得不确定。您可能会破坏另一个应用程序,该应用程序也使用程序集,并且无意中依赖于错误行为才能正常运行。一个无意的错误,比如重命名一个公共方法,当然总是破坏一个应用程序的好方法,通往DLL地狱的道路上有很多善意,但最终都是坏事。

但是,GAC只关注[AssemblyVersion],而忽略文件版本。若要获得更新的程序集以替换现有程序集,必须先删除旧程序集。这是故意的,防止意外更换。

要修复的应用程序的.config文件中的<bindingRedirect>将比发布者策略更容易启动。

我认为这与GAC使用.NET程序集的哪些参数为其提供唯一标识符有关。如果程序集版本是这些唯一性参数之一,但文件版本不是,这可能解释了您的症状。具体来说,这与GAC对强命名组件的需求有关

这个链接表示

http://msdn.microsoft.com/en-us/library/wd40t7ad.aspx

最新更新