C# 更新GAC DLL

C# 更新GAC DLL,c#,visual-studio-2010,setup-project,gac,C#,Visual Studio 2010,Setup Project,Gac,我在GAC中注册了一个DLL,其中有一个bug(v4.2.0) 因此,我修复了这个bug,只更新了文件版本(v4.2.1)(保留程序集版本v4.2.0),并构建了一个新的MSI包 问题是GAC中没有安装DLL。我在C:\Windows\Microsoft.NET\assembly\GAC\u MSIL\MyDLL\v4.0\u 4.2.0.0\u 2269313d92725976中用鼠标右键单击DLL验证了这一点,并检查了文件版本,它仍然是v4.2.0在C:\Windows\Microsoft.

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

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

问题是GAC中没有安装DLL。我在
C:\Windows\Microsoft.NET\assembly\GAC\u MSIL\MyDLL\v4.0\u 4.2.0.0\u 2269313d92725976
中用鼠标右键单击DLL验证了这一点,并检查了文件版本,它仍然是
v4.2.0
C:\Windows\Microsoft.NET\assembly\GAC\u MSIL\MyDLL
下也没有创建其他文件夹

但是如果我卸载第一个版本,然后安装新的DLL,那么它在GAC中安装正常

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

更新

我找到了一篇关于发布者策略()的文章,正在尝试这样做。我已经生成了策略程序集。但是当我尝试将Visual Studio添加到安装项目时,它崩溃了=(

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


所以我还是被卡住了。

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

这个链接也说明了这一点


更新[AssemblyFileVersion]对于一个bug修复通常是正确的方法,尽管如果你在GAC中对一个程序集这样做会变得不确定。你会冒着破坏另一个也使用该程序集的应用程序的风险,无意中依赖于bug行为来正常工作。一个无意的错误,比如重命名一个公共方法,当然总是打破错误的好方法在应用程序中,通往地狱的道路是由许多好意铺就的,而这些好意最终都变成了坏事

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


要修复的应用程序的.config文件中的
比发布者策略容易得多。

使用相同的程序集版本但不同的文件版本可能是添加“更新”的方式对于现有版本,如此处所述:好的,这对您有用吗?我认为您的系统依赖于文件版本?是的。卸载旧版本并安装新版本就可以了。仍然版本控制感谢文件版本