我有一个正在尝试在 MSBuild 中执行的构建目标。目标有一些输入和输出,我放在那里以加快中间构建的时间。输入文件始终存在(头文件),另一方面,输出并不总是存在(XML 文件)。
可能跳过任务的中间构建是非常可取的,因为它在性能方面非常昂贵。
无论如何,如果输出已经存在,则输入和输出工作得很好。在这种情况下,MSBuild 会发出一条非常有用的消息,指出目标已被跳过,因为所有文件都是最新的。
当输出目录和文件不存在(第一次运行此任务)时,MSBuild 会失败并显示以下消息:
跳过目标 [targetname],因为它没有输出。
添加详细详细信息告诉我原因是因为 @(OutputXML) 项目是空的。好的,那现在呢?因此,MSBuild 中的中间构建的整个概念似乎并不十分强大。
我的问题是,我怎样才能获得中间构建的好处,并且在没有输出的情况下仍然执行这个目标?(我希望我不必求助于编写自己的任务扩展)
这是我的构建脚本的相关部分:
<ItemGroup>
<Headers Include="..\**\*.h" />
<OutputXML Include="$(OutputDir)\*.xml" />
</ItemGroup>
<Target Name="Doxygen"
Inputs="@(Headers)"
Outputs="@(OutputXML)" >
<Exec ... />
</Target>
注意:我一直在 google、msdn 和这个网站上试图找到答案,但到目前为止都没有成功。虽然我发现了关于 MSBuild 的非常有用的信息。