我们有一个项目的解决方案,将主要输出转储到GAC。我们需要这样做,因为我们的软件是另一个应用程序的插件,可以安装在任何地方,可能同时安装多个版本。
我们在使用MSI升级和卸载方面遇到了问题。我们遇到的问题会影响我们在RemovePreviousVersions设置的两端。
当RemovePreviousVersions = False时,它 要求用户卸载 app手动。如果卸载程序实际上正常工作,这对我们来说没问题。但是,卸载离开了 DLL在GAC中挥之不去 安装下一个版本的 安装程序不会覆盖DLL 自GAC版本号以来 是相同的。
当RemovePreviousVersions = True时, 安装以后的MSI版本 超过已安装的 应用程序不会覆盖 大概是因为GAC中的DLL DLL版本是相同的OR,因为卸载不起作用。我不确定我知道的原因是什么。
我们要做的就是要么能够正常卸载,要么正确升级RemovePreviousVersions并安装新版本而无需干预。我没有理由改变我的所有DLL版本。我们不关心版本控制,除了知道他们的整体应用程序的版本,我们可以通过设置安装项目的版本来完成这一切。
FWIW,我们不能使用WIX,因为我们需要使用的某些第三方多部分DLL存在局限性,这些DLL无法使用WIX轻松添加到GAC,但使用VS Setup项目可以很好地工作。
修改 顺便说一下,通过Explorer视图或使用gacutil.exe / u手动从GAC中删除文件可以很好地工作。但是,我认为我不应该在我的安装项目中添加对gacutil的调用。我觉得它应该为我做。虽然,我可能会给.NET安装项目太多的信任。
答案 0 :(得分:0)
关于安装项目没有从GAC卸载程序集:您是否检查过注册表中没有对其进行延迟引用
计算机\ HKEY_CURRENT \ USER \软件\微软\安装\组件\环球
卸载后?我遇到了类似的问题,一旦我从注册表中手动删除了该条目,卸载就会正确地从GAC中删除该程序集。