【发布时间】:2011-09-21 10:11:21
【问题描述】:
我们有一个将主要输出转储到 GAC 的项目的解决方案。我们需要这样做,因为我们的软件是另一个应用程序的插件,它可以安装在任何地方,并且可能同时安装多个版本。
我们在从 MSI 升级和卸载时遇到问题。我们遇到的问题对 RemovePreviousVersions 设置的双方都有影响。
当 RemovePreviousVersions=False 时,它 要求用户卸载 手动应用。如果卸载程序实际上可以正常工作,这对我们来说很好。但是,卸载会留下 徘徊在 GAC 中的 DLL 和 安装下一个版本的 安装程序不会覆盖 DLL 在 GAC 中,因为他们的版本号 是相同的。
当 RemovePreviousVersions=True 时, 安装更高的 MSI 版本 在已经安装的之上 应用程序不会覆盖 GAC 中的 DLL 大概是因为 DLL 版本相同或因为卸载不起作用。我不确定我知道的足够多,不知道是什么原因。
我们想要做的就是让卸载正常工作或升级实际 RemovePreviousVersions 正确并安装新版本而无需干预。我没有理由更改我所有的 DLL 版本。除了知道他们使用的整个应用程序的版本之外,我们不太关心版本控制,我们可以通过设置安装项目的版本来做到这一点,仅此而已。
FWIW,我们不能使用 WIX,因为我们需要使用的一些第三方多部分 DLL 存在限制,使用 WIX 无法轻松将其添加到 GAC,但使用 VS 设置项目可以完美运行。
编辑: 顺便说一句,通过资源管理器视图手动从 GAC 中删除文件或使用 gacutil.exe /u 效果很好。但是,我认为我不应该在我的设置项目中添加对 gacutil 的调用。我觉得它应该为我做。不过,我可能对 .NET 安装项目的功劳太大了。
【问题讨论】:
标签: .net assemblies setup-project gac