Windows installer Windows Installer,GAC文件夹中的项目未显示在GAC中

Windows installer Windows Installer,GAC文件夹中的项目未显示在GAC中,windows-installer,Windows Installer,在windows安装程序的全局程序集缓存文件夹中,我有一个要注册的dll。原因是此文件在自定义操作执行期间加载的配置文件中引用。当执行自定义操作时,配置仍然无法定位此文件(即使它应该位于GAC中)。经过一些审查,(GACUTIL/l)该文件似乎不在GAC中。我似乎不明白为什么。此项目何时添加到GAC?在自定义操作之后?这对我来说似乎不太合理。这个dll也没有什么特别之处。它是从项目输出生成的,并具有强名称 为什么它不能出现在gac中 谢谢当您的托管自定义操作运行时,程序集尚未在GAC中注册 根据

在windows安装程序的全局程序集缓存文件夹中,我有一个要注册的dll。原因是此文件在自定义操作执行期间加载的配置文件中引用。当执行自定义操作时,配置仍然无法定位此文件(即使它应该位于GAC中)。经过一些审查,(GACUTIL/l)该文件似乎不在GAC中。我似乎不明白为什么。此项目何时添加到GAC?在自定义操作之后?这对我来说似乎不太合理。这个dll也没有什么特别之处。它是从项目输出生成的,并具有强名称

为什么它不能出现在gac中


谢谢

当您的托管自定义操作运行时,程序集尚未在GAC中注册

根据经验,自定义操作程序集永远不应该依赖于它所在的安装包部署的任何程序集

这条规则有很多,但大多数都没有。Windows Installer使用与Fusion API交互,将程序集安装到GAC。问题在于,虽然Windows Installer支持事务处理/回滚行为,但Fusion不支持。因此,Windows Installer将等待安装程序执行的提交阶段(在InstallFinalize内)将DLL发送到GAC。这将根据程序集(安装过程中需要启动的某些自定义操作和服务)为内容创建竞争条件


解决此问题的一个好方法是使用WiX编写托管自定义操作。DTF的一个特性是获取所有项目内容项和引用,并将它们压缩到CA dll中。然后在运行时,它会被提取到一个临时目录中,从而使依赖项可用。现在,您的程序集是一个支持文件,而不是实际部署的程序集,因此Frederic的注释不适用。

问题在于自定义操作实际上没有引用它。安装的应用程序使用WCF,库是自定义绑定的一部分。所以当我尝试使用ConfigurationManager遍历配置文件时,它会中断,因为管理器实际上正在加载类型。我想我必须回到使用
XMLDocument
来更新文档的纯XML遍历。