更新GAC dll

时间:2012-12-18 09:30:59

标签: c# visual-studio-2010 setup-project gac

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

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

问题是DLL没有安装在GAC中。我通过右键单击C:\Windows\Microsoft.NET\assembly\GAC_MSIL\MyDLL\v4.0_4.2.0.0__2269313d92725976中的DLL验证了这一点,并检查了文件版本,该版本仍为v4.2.0C:\Windows\Microsoft.NET\assembly\GAC_MSIL\MyDLL下也没有创建其他文件夹。

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

我接近这个错误的方式吗?我们的应用程序设置为使用特定版本,因此只需创建程序集版本v4.3.0并将其安装在GAC中就不会起作用。

更新

我找到了有关发布商政策的文章(http://support.microsoft.com/kb/891030),并且正在尝试这样做。我已经制定了政策大会。但是当我尝试将它添加到安装项目时,Visual Studio崩溃=(

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

所以我仍然坚持。

2 个答案:

答案 0 :(得分:4)

更新[AssemblyFileVersion]以获取错误修复通常是正确的方法,但如果您对GAC中的程序集执行此操作,则会获得iffy。您冒着破坏另一个也使用程序集的应用程序的风险,并且无意中依赖于错误行为才能正常运行。像重命名公共方法这样的无意识错误当然总是破坏应用程序的一种好方法,通往DLL Hell的道路铺满了许多善意,结果很糟糕。

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

要修复的应用的.config文件中的<bindingRedirect>比发布商政策更容易上手。

答案 1 :(得分:0)

我认为这与GAC用于为其提供唯一标识符的.NET程序集的哪些参数有关。如果程序集版本是其中一个唯一性参数,但文件版本不是,则可以解释您的症状。具体而言,这涉及GAC对强名称汇编的需求

此链接说明了

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