0

我已经构建了一个 WIX 合并模块 (.wxs),将多个组件传递到目标机器,并且正在努力了解是什么/谁/如何负责传递/安装这些组件的依赖项。

每个组件都是一个 .NET 2.0 程序集,因此我的合并模块需要在客户端计算机上安装 .NET 2.0。

如何在我的合并模块中表达/实现这一点?1. 我是否以某种方式表达了对 .NET 2.0 的依赖,并且我的合并模块的消费者必须发布并安装所需的框架?2. 我是否在 .NET 2.0 合并模块上添加要求并让我的合并模块安装 .NET 2.0 合并模块。

非常感谢任何帮助。

4

1 回答 1

0

正确编写和编译的 .NET 2.0 程序集可能确实依赖于 .NET 2.0、3.0 或 3.5 (CLR 2.0) 或 .NET 4.0 / 4.5 (CLR 4.0)。因此,说您需要 .NET 2.0 或更高版本可能更准确。

也就是说,合并模块只是其中的一部分。你如何选择设计这个表达式取决于你,这是我考虑的一种方式。

安装 .NET 不是合并模块的工作。事实上,它不可能是由于 Windows 安装程序互斥锁强制每台机器执行一个执行序列。这意味着这也不是 MSI 的工作。这就是引导程序和链接程序的用武之地。

MSI可以做的是仔细检查chainer是否完成了它的工作。此表达式可以在 MSI 或合并模块中编写。

您首先编写一个 AppSearch / Reglocator 来检测 .NET。WiX NetFx 扩展有一些内置属性,您可以参考这些属性来简化此操作。

现在您创作了 LaunchCondition。但是,对于 WiX,合并模块中不存在 Condition 元素。这是因为 MSDN 说 MergeModules 不应该使用 LaunchCondition 表。相反,您创作了一个 Type 19 错误自定义操作并在表中对其进行排序。

现在您可能希望在此检查上设置一个条件,以允许 MSI 覆盖该检查。(不是 DOTNETFRAME20FOUND 也不是 IGNOREDOTNETFRAME20)。事实上,您可能希望将所有这些放在一个合并模块( REQUIRESDOTNETFRAME20.msm )中,并由多个共享相同依赖项的合并模块引用它(不要重复自己)。

在我的上一份工作中,我们进行了产品线开发,这意味着数千个合并模块以不同的组合组合在一起以创建数十种产品。我们在独特的模块中表达了所有这些,并且通常在产品层而不是服务系列/组件层创建关联。有时,如果这是一个不寻常的依赖关系,我们会这样做。

于 2013-02-22T22:17:38.513 回答