我目前正在尝试创建一个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(也引用了库)
答案 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
日志应列出您的组件以及它是否正在安装以及它的安装位置。