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

时间:2015-12-15 07:01:57

标签: msbuild wix heat

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

到目前为止,它可以在我的本地系统上运行,因为正在尊重项目构建顺序。

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

有没有办法等待"在构建所有项目引用之后,直到或执行heat命令?

2 个答案:

答案 0 :(得分:8)

好的,所以我花了好几个小时来弄清楚如何在所有参考文献被重新启动后解雇Heat。我只使用<PreBuildEvent>命令行以及<PostBuildEvent>Heat目标找到了BeforeBuildAfterBuild的解决方案。

所以我在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>

答案 1 :(得分:0)

我遇到了同样的问题,通过结合接受的答案和this answer来解决此问题,以确保我正在复制文件的构建后事件始终运行:

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

此外,我的构建服务器正在使用MSBuild命令行,并且我使用this answer来定位本地MSBuild.exe,因此无需推送到构建服务器就可以在本地测试更改。

相关问题