1

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

我确实知道如何手动添加引用 dll,但我真的希望我可以使用一些自动化。

我确实发现这个堆栈溢出问题回答了类似的问题,但 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(也引用库)

4

1 回答 1

1

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

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

这使得文件在构建wixproj时通过烛光自动链接到构建过程中。您也可以通过visual studio添加文件;右键单击 wixproj -> 添加 -> 现有文件 -> 选择 Output.wxs 并单击“添加”按钮上的小箭头,然后选择“添加为链接”。

从 Output.wxs 内容看来,问题可能出在

<DirectoryRef Id="ReferenceProject.Binaries">

您应该能够在 HeatProject 任务中定义 DirectoryRefId 并将其设置为您希望组件安装位置的目录 ID。您也可以定义 SuppressUniqueIds="true" 来获取真实姓名,而不是 "c​​mp4449C9C84D65952451BBDF1488B8BE48" 和 "fil72052E64CE55C9B2516044DF15A1F318"

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

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

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

于 2016-06-10T15:17:06.010 回答