是否可以使用wix通过加热自动获取csproj的参考?

时间:2016-06-08 16:17:46

标签: wix windows-installer install wix3.10

我目前正在尝试创建一个wix安装程序,并发现this article指出WiX 3.8无法使用堆获取每个项目文件中添加的引用。 3.10仍然如此吗?

我知道如何手动添加参考dll,但我真的希望能使用一些自动化功能。

我确实找到this stack overflow question answering similar question但是HeatProject方法对我来说似乎不起作用。

<Target Name="BeforeBuild">
  <HeatProject ToolPath="$(WixToolPath)" AutogenerateGuids="true" OutputFile="OutputFile.wxs" SuppressFragments="true" Project="ReferencedProject.csproj" ProjectOutputGroups="Binaries" />
</Target>

此代码段成功生成了OutputFile.wxs。但是,当我从手动wxs中删除带有exe文件的组件时,最终结果msi没有安装.exe(以及所有引用)

编辑:

OutputFiles.wxs的内容如下:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="ReferenceProject.Binaries">
            <Component Id="cmp7C475BDFC8ADED831D737FA819051E2F" Guid="*">
                <File Id="filC6ECF306B200636DD5F3BA1DCBDA0F15" Source="$(var.ReferenceProject.TargetDir)\ReferenceProject.exe" />
            </Component>
            <Component Id="cmp4449C9C84D65952451BBDF1488B8BE48" Guid="*">
                <File Id="fil72052E64CE55C9B2516044DF15A1F318" Source="$(var.ReferenceProject.TargetDir)\ReferenceProject.exe.config" />
            </Component>
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="ReferenceProject.Binaries">
            <ComponentRef Id="cmp7C475BDFC8ADED831D737FA819051E2F" />
            <ComponentRef Id="cmp4449C9C84D65952451BBDF1488B8BE48" />
        </ComponentGroup>
    </Fragment>
</Wix>

在我的主要wxs上,我确实有一个安装了一行的功能

  <ComponentGroupRef Id="ReferenceProject.Binaries"/>

但是不包括exe(也引用了库)

1 个答案:

答案 0 :(得分:1)

在我收集目录的wix项目中,我将收获输出文件链接到我的主要wixproj中,如下所示:

<ItemGroup>
  ...
  <Compile Include="Components\HeatOutput.wxs">
    <Link>Components\HeatOutput.wxs</Link>
  </Compile>
  ...
</ItemGroup>

在构建wixproj时,这会使文件自动链接到构建过程中的烛光。您还可以通过visual studio添加文件;右键单击wixproj - &gt;添加 - &gt;现有文件 - &gt;选择Output.wxs并单击&#34;添加&#34;上的小箭头。按钮并选择&#34;添加为链接&#34;。

从Output.wxs内容看起来问题可能是

<DirectoryRef Id="ReferenceProject.Binaries">

您应该能够在HeatProject任务中定义DirectoryRefId并将其设置为您希望组件安装的位置的目录ID。你也可以定义SuppressUniqueIds =&#34; true&#34;得到实名而不是&#34; cmp4449C9C84D65952451BBDF1488B8BE48&#34;和&#34; fil72052E64CE55C9B2516044DF15A1F318&#34;

我还建议在Orca中打开输出的MSI,并验证组件是否在Components表中定义。您还可以检查要安装的目录。在目录表中,您可以看到该目录指向的位置。

如果这不能让您深入了解组件的运行位置/未安装的原因。我会从命令行运行msi; msiexec /i <MsiFile>.msi /l*v Logfile.txt

日志应列出您的组件以及它是否正在安装以及它的安装位置。

相关问题