我在VS 2010中使用WiX 3.5,并且我已将所有项目程序集添加为安装项目(.wixproj)中的引用,并将Harvest属性设置为True,以便二进制文件,内容和卫星包含在.msi文件中。
但是,我如何将任何第三方程序集(.dll)添加到.msi输出?我是否需要将每个显式添加到Product.wxs文件中,还是有更好的方法?理想情况下,我想在安装项目中将它们添加为文件引用,但这似乎不是一个选项?
答案 0 :(得分:7)
是的,您需要手动将它们添加到某些wxs文件或 您可以使用使用 heat 的预构建步骤为您收集这些文件(假设所有这些文件都位于单独的目录中)。
加热是Wix的一部分,可以使用 dir 开关收集整个目录。根据命令行参数,它将生成一个包含单个ComponentGroup的单独wxs文件。只需从product.wxs引用此ComponentGroup。
有关我当前如何使用heat来获取我的发布目录的示例:
heat dir“../../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>
答案 1 :(得分:4)
WiX安装程序项目当前使用a bug in Heat,这意味着不会自动收集项目的引用程序集。你可能不得不等待版本4才能得到解决。
与此同时,@ Elmar de Koning的回答可能是目前最好的。