更新GAC dll

我有一个在GAC中注册的DLL,它有一个bug(v4.2.0)。

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

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

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

我以错误的方式接近这个吗? 我们的应用程序设置为使用特定版本,因此只需创建程序集版本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

链接地址: http://www.djcxy.com/p/67487.html

上一篇: Updating GAC dlls

下一篇: Share classes between JVMs