情境: 我有一个合并模块,其中包含某些程序集,这些程序集已安装到GAC中。 此合并模块由msi包使用。
合并模块还包含与每个程序集关联的GAC发布者策略文件。
安装msi软件包后,将在以下位置创建与这些发布者策略文件对应的多个注册表项:HKLM \ SOFTWARE \ Microsoft \ Fusion \ PublisherPolicy \ Default。卸载此msi软件包后,即使从GAC清除了实际的发布者策略文件和程序集,也不会清除与发布者策略文件对应的注册表项。
到目前为止进行的调查:
总而言之,下面的URL指出,在安装程序中包含发布者策略文件的Windows Installer标准是将它们直接添加到MSI包而不是合并模块。将它们添加到合并模块的问题导致CLR使用的关联策略注册表项在注册表中被孤立。
我认为下面的链接描述了此问题的原因,基本上Windows Installer标准表明不应使用合并模块将发布者策略文件安装到GAC中。安装程序验证的意图可能是强制策略文件与特定产品版本显式关联。
参考: http://msdn.microsoft.com/en-us/library/windows/desktop/aa369203(v=vs.85).aspx
为了验证行为,我手动修改了msi安装包,并从ModuleComponents表中删除了Policy文件组件。通过这样做,删除组件引用与合并模块的关联,并直接将它们分配给MSI包。 卸载后,策略文件注册表项不再在注册表中孤立并且问题已解决
潜在解决方案
长期解决方案是重新设计合并模块以排除策略文件并将其直接添加到每个产品MSI包
是否有人有其他更好的解决方案来解决此问题?
此致 Kiran Hegde