WiX - 在安装程序输出中收集非项目程序集

8
我正在使用VS 2010中的WiX 3.5,并将所有项目程序集添加为设置项目(.wixproj)中的引用。我将Harvest属性设置为True,以便将二进制文件、内容和卫星文件包含在.msi文件中。
然而,我该如何将第三方程序集(.dlls)添加到.msi输出中呢?我需要在Product.wxs文件中明确地添加每个程序集吗,还是有更好的方法?理想情况下,我希望将它们作为文件引用添加到安装程序项目中,但这似乎不是一个选项?
2个回答

7

是的,您需要手动将它们添加到一些wxs文件中,或者您可以使用预构建步骤,使用heat来帮您收集这些文件(假设所有这些文件都驻留在单独的目录中)。

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
谢谢,我想我会明确地定义它们。 - devdigital
你不需要定义一个属性来引用包含组件组的生成wxs文件吗? - KennO
你是否在Product.wxs中以某种方式将$(var.BuildOutputDir)设置为类似于$(var.YOURPROJECT.TargetDir)的内容?如果是,你是如何实现的? - jpierson

4

当前在WiX安装程序项目中使用的Heat存在一个bug,这意味着一个项目的引用程序集不会自动收集。在问题得到解决之前,您可能需要等待版本4。

与此同时,@Elmar de Koning的回答现在可能是最好的选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接