我在 VS 2010 中使用 WiX 3.5,我已将所有项目程序集添加为安装项目 (.wixproj) 中的引用,并将 Harvest 属性设置为 True,以便二进制文件、内容和卫星包含在.msi 文件。
但是,我将如何将任何第三方程序集 (.dll) 添加到 .msi 输出?我是否需要将每个显式添加到 Product.wxs 文件中,还是有更好的方法?理想情况下,我想将它们添加为安装项目中的文件引用,但这似乎不是一个选项?
我在 VS 2010 中使用 WiX 3.5,我已将所有项目程序集添加为安装项目 (.wixproj) 中的引用,并将 Harvest 属性设置为 True,以便二进制文件、内容和卫星包含在.msi 文件。
但是,我将如何将任何第三方程序集 (.dll) 添加到 .msi 输出?我是否需要将每个显式添加到 Product.wxs 文件中,还是有更好的方法?理想情况下,我想将它们添加为安装项目中的文件引用,但这似乎不是一个选项?
是的,您需要手动将它们添加到某些 wxs 文件中,或者您可以使用预构建步骤使用热量为您收集这些文件(假设所有这些文件都位于单独的目录中)。
Heat是 Wix 的一部分,可以使用dir开关获取整个目录。根据命令行参数,它将生成一个单独的 wxs 文件,其中包含一个 ComponentGroup。只需从 product.wxs 中引用此 ComponentGroup。
例如,我目前如何使用热量来收获我的发布目录:
热目录“../../bin/release”-gg -cg CG.ApplicationBinaries -dr INSTALLDIR -scom -sfrag -sreg -srd -var var.BuildOutputDir -o ApplicationBinaries.wxs
这将生成文件 ApplicationBinaries.wxs:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="INSTALLDIR">
<Component Id="cmp53F90D1335DD67504EC2B9E1E8620DD3" Guid="{CA2DF1B5-7B20-4596-84A4-925B4F9BA6EC}">
<File Id="filC65F9CB88694FCA79FCB3CADB9481921" KeyPath="yes" Source="$(var.BuildOutputDir)\AsyncTCPsocket.dll" />
</Component>
....
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="CG.ApplicationBinaries">
<ComponentRef Id="cmp53F90D1335DD67504EC2B9E1E8620DD3" />
...
</ComponentGroup>
</Fragment>
</Wix>
当前,WiX 安装程序项目使用的Heat中存在一个错误,这意味着不会自动获取项目的引用程序集。您可能必须等待版本 4 才能得到解决。
与此同时,@Elmar de Koning 的回答可能是目前最好的。