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

是否可以使用wix通过加热自动获取csproj的参考?,wix,windows-installer,installation,wix3.10,Wix,Windows Installer,Installation,Wix3.10,我目前正在尝试创建一个wix安装程序,发现wix 3.8无法使用heap获取每个项目文件中添加的引用。对于3.10,这仍然是真的吗 我确实知道如何手动添加参考DLL,但我真的希望可以使用一些自动化 我确实发现了,但HeatProject方法似乎不适合我 <Target Name="BeforeBuild"> <HeatProject ToolPath="$(WixToolPath)" AutogenerateGuids="true" OutputFile="OutputFi

我目前正在尝试创建一个wix安装程序,发现wix 3.8无法使用heap获取每个项目文件中添加的引用。对于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不包括在我的wix项目中(也被引用的库)

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

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

...
组件\HeatOutput.wxs
...
这样,在构建wixproj时,文件就会通过烛光自动链接到构建过程中。您还可以通过VisualStudio添加文件;右键单击wixproj->Add->Existing file->pick Output.wxs,然后单击“Add”按钮上的小箭头并选择“Add as link”

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

<DirectoryRef Id="ReferenceProject.Binaries">

您应该能够在HeatProject任务中定义DirectoryRefId,并将其设置为要安装组件的位置的目录Id。您还可以定义suppressUniqueId=“true”以获取实名,而不是“cmp449c9c84d65952451bbdf1488be48”和“fil72052E64CE55C9B2516044DF15A1F318”

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

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


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

您可以发布OutputFile.wxs的内容吗?我的猜测是,您只需将Component/ComponentGroup引用添加到产品中的一个功能,它就可以链接到OutputFile.wxs的内容中。我的安装程序中没有使用HeatProject生成任务。@BrianSutherland非常感谢您的输入。我已经编辑了我原来的帖子。我确保有你提到的ComponentGroupRef。像wxi一样,我是否需要包含OutputFile.wxs?非常感谢您跟踪Brian。我很欣赏你的见解。似乎DirectoryRefId是仅对HeatDirectory可用的参数。我想我应该问一下,改变我的问题是否是更好的做法,并问我是否应该使用HeatDirectory而不是HeatProject?还检查了Orca,确信exe不在那里。对于HeatProject,我认为可以使用AdditionalOptions=“-dir”添加-dir选项。如果exe根本不存在,我认为您需要通过将其作为链接文件包含在wixproj中来链接输出。奇怪的是,你没有将文件添加到MSI中,编译器却没有抱怨缺少引用。在Orca中,包含exe的功能是否列在功能表中?在FeatureComponents中,该功能是否包含您的ourput.wxs中的组件名称?它抱怨在“Fragment:”部分中对符号“Directory:ReferenceProject.Binaries”的引用未解析。这是我的新项目。即使我已经添加了APPLICATIONFOLDER(在我的主wxs中定义)