WiX Heat:预构建事件在构建服务器上过早触发

WiX Heat: Pre-build event fires too early on build server

我正在为我的 Visual Studio 解决方案收集目录。

到目前为止它在我的本地系统上工作可能是因为项目构建顺序得到了尊重。

当我 运行 构建服务器上的安装程序时,它会找到正确的目录,但在构建安装文件时尚未创建该目录。它抛出一个 HEAT5052 错误说 The directory 'a:\b\c' could not be found.

有什么方法可以"wait" 直到或在构建所有项目引用后执行 heat 命令?

好的,所以我花了几个小时来弄清楚如何在所有引用都被重新引用后触发 Heat。我只使用 Heat 命令行和 BeforeBuildAfterBuild 目标找到 <PreBuildEvent><PostBuildEvent> 的解决方案。

所以我在我的 wix2010.targets 文件中找到了所有类型的目标 Program files (x86)\MSBuild\Microsoft\Wix\ 文件夹。它包含一个名为 AfterResolveReferences 的目标,它就是这样做的。所以这是我最终得到的代码(以防有人感兴趣):

<Target Name="AfterResolveReferences">
    <HeatDirectory
        ToolPath="$(WixToolPath)"
        OutputFile="Product.Binaries.wxs"
        SuppressFragments="$(HarvestDirectorySuppressFragments)"
        Transforms="Filter.xslt"
        Directory="$(HarvestFolder)"
        DirectoryRefId="MY_FOLDER"
        ComponentGroupName="Binaries"
        GenerateGuidsNow="true"
        SuppressRootDirectory="true"
        SuppressRegistry="true"
        PreprocessorVariable="var.App.TargetDir">
    </HeatDirectory>
</Target>

我遇到了同样的问题,通过结合接受的答案和 解决了这个问题,以确保我的 post 构建事件(复制文件)始终运行:

<RunPostBuildEvent>Always</RunPostBuildEvent> 
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>

此外,我的构建服务器使用的是 MSBuild 命令行,我使用 定位我的本地 MSBuild.exe,这样我就可以在本地测试我的更改,而无需推送到构建服务器。