我在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