我已经构建了一个WIX合并模块(.wxs),它将多个组件提供给目标机器,并且很难理解负责提供/安装这些组件的依赖关系的人/谁/如何负责。
每个组件都是.NET 2.0程序集,因此我的合并模块需要在客户端计算机上安装.NET 2.0。
如何在合并模块中表达/实现此功能? 1.我是否以某种方式表达了对.NET 2.0的依赖,我的合并模块的消费者必须发布并安装所需的框架? 2.我是否在.NET 2.0合并模块上添加了一个要求,并让我的合并模块安装了.NET 2.0合并模块。
非常感谢任何帮助。
答案 0 :(得分: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 Installr互斥锁为每台机器强制执行一个执行序列。这意味着它也不是MSI的工作。这就是引导程序和引导者进入的地方。
MSI可以做的是仔细检查chainer是否正常工作。此表达式可以在MSI或合并模块中创作。
您首先要创建一个AppSearch / Reglocator来检测.NET。 WiX NetFx扩展具有一些内置属性,您可以参考这些属性以使其更容易。
现在您创作LaunchCondition。但是,使用WiX时,合并模块中不存在Condition元素。这是因为MSDN说MergeModules不应该使用LaunchCondition表。而是编写一个Type 19错误自定义操作并在表中对其进行排序。
现在您可能希望在此检查上添加一个条件,允许MSI覆盖检查。 (不是DOTNETFRAME20FOUND而不是IGNOREDOTNETFRAME20)。实际上,您可能希望将所有这些放在合并模块(REQUIRESDOTNETFRAME20.msm)中,并通过多个共享模块引用它,这些模块都具有相同的依赖关系(不要自己重复)。
在我上一份工作中,我们进行了产品线开发,这意味着数千个合并模块以不同的组合形式组合在一起,以创建数十种产品。我们在独特的模块中表达了所有这些,并且通常在产品层而不是服务系列/组件层创建关联。有时我们会这样做,如果它是一个不寻常的依赖。