8

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

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

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

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

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

更新

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

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

所以我还是卡住了。

4

2 回答 2

5

更新 [AssemblyFileVersion] 以修复错误通常是正确的方法,但如果您为 GAC 中的程序集这样做,它会变得很不确定。您冒着破坏另一个也使用程序集的应用程序的风险,并且无意中依赖错误行为来正常运行。像重命名公共方法这样的无意错误当然总是破坏应用程序的好方法,通往 DLL Hell 的道路是由许多好的意图铺成的,结果却是坏的。

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

<bindingRedirect>您要修复的应用程序的 .config 文件中的A比发布者策略更容易启动。

于 2012-12-18T10:33:53.647 回答
0

我相信这与 GAC 使用 .NET 程序集的哪些参数给它一个唯一标识符有关。如果程序集版本是这些唯一性参数之一,但文件版本不是,那可能会解释您的症状。具体来说,这与 GAC 对强命名程序集的需求有关

这个链接说了很多

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

于 2012-12-18T10:22:43.307 回答