我在GAC中注册了一个DLL,GAC中有一个错误(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.0,也没有在C:\Windows\Microsoft.NET\assembly\GAC_MSIL\MyDLL下创建的其他文件夹。
但是!--如果我卸载第一个版本,然后安装新的DLL,它就会在GAC中安装OK。
我是不是走错路了?我们的应用程序被设置为使用特定版本,因此只创建程序集版本v4.3.0并将其安装在GAC中是行不通的。
更新
我已经找到了一篇关于发行者策略( publisher policies,http://support.microsoft.com/kb/891030)的文章,并且正在尝试这样做。我已经生成了策略程序集。但是,当我试图将Visual添加到安装项目=(
我还尝试将其作为内容文件添加到主项目中(然后将内容文件添加到GAC中)。但是它抱怨大会没有被签署。
所以我还是被困住了。
发布于 2012-12-18 10:33:53
为bug修复更新AssemblyFileVersion通常是正确的方法,尽管对于GAC中的程序集来说,它会变得不确定。您可能会破坏另一个也使用程序集的应用程序,并且无意中依赖于错误行为才能正常运行。一个无意中的错误,比如重命名一个公共方法,当然是打破一个应用程序的好方法,通往DLL地狱的道路上铺满了许多坏的意图。
但是,GAC只关注AssemblyVersion,忽略文件版本。要使更新的程序集替换现有程序集,您必须首先删除旧的程序集。这是故意的,防止意外更换。
您想要修复的应用程序的<bindingRedirect>文件中的.config将比发行者策略容易得多。
发布于 2012-12-18 10:22:43
我相信这与.NET程序集的参数有关,GAC使用这些参数来给它一个唯一的标识符。如果程序集版本是这些惟一参数之一,但文件版本不是,这可能会解释您的症状。具体来说,这涉及到GACs对强命名程序集的需求。
这个链接说明了
http://msdn.microsoft.com/en-us/library/wd40t7ad.aspx
https://stackoverflow.com/questions/13929914
复制相似问题