WiX HowTo:在不重新安装的情况下降级第三方依赖项?

时间:2017-10-24 19:04:53

标签: installation wix windows-installer install dependency-management

背景

WiX & Windows Installer 对我来说是全新的。

在制作中,我们使用MSI(使用WiX创建)来安装我们的软件。 MSI引用第三方程序集(例如OtherCompany.ThirdParty.dll,版本2.5)。

我们软件的下一个版本必须引用旧版本的第三方程序集(例如OtherCompany.ThirdParty.dll,版本1.7)。

虽然我知道安装较旧版本的依赖项并不常见,但必须发生这种情况。

所以我的问题是......如何配置MSI(由WiX生成)以使用较旧版本的程序集而无需完全卸载现有程序包?

选项

我们已经探讨了以下内容:

  1. 增加程序集的版本
    • 这是第三方集会,
    • 可追溯性这不是一个选项
  2. 重命名程序集
    • 使用NuGet检索依赖关系...所以这不会是直截了当的
  3. 强制完全删除现有安装(自动或手动)
    • 我们不希望丢失在先前安装期间收集的配置信息,因此这不是一个选项
  4. 在计算成本之前安排RemoveExistingProducts
    • 不推荐Microsoft(请参阅:MSDN
  5. 自定义操作:删除依赖项
    • 如果安装失败,应用程序可能会处于未定义状态
  6. 在设置中覆盖文件版本
    • 继续前进,这将容易出错
  7. 更改REINSTALLMODE
    • 从我读过的文章来看,这似乎只能作为最后的手段使用。
  8. 使用WIX配套文件
    • 我还在调查
  9. 对于版主

    我知道此主题还有其他SO帖子。请注意,一些推荐的解决方案不完整或容易出错。

    参考

1 个答案:

答案 0 :(得分:3)

有些问题最好通过应用程序设计而不是部署来解决。

有两个地方可以保存特定版本的.NET程序集:GAC或应用程序文件夹(或带有probing privatePath的子文件夹)。在任何一种情况下,您可能都想使用bindingRedirect

此外,如果使用GAC绑定不成功,您可以使用AppDomain.AssemblyResolve 从特定位置加载。

一般参考:How the Runtime Locates Assemblies - 感谢@Pressacco。