MSBuild:目标输入和输出在第一次执行时失败
我尝试在MSBuild中执行一个生成目标。目标有一些输入和输出,我把它们放在那里,以加快中间构建的时间。输入文件总是存在(头文件),而输出文件并不总是存在(XML文件) 一个可能跳过任务的中间构建是非常可取的,因为它在性能方面非常昂贵 无论如何,如果输出已经存在,那么输入和输出工作得很好。在这种情况下,MSBuild会发出一条非常有用的消息,说明目标已跳过,因为所有文件都是最新的 当输出目录和文件不存在时(第一次运行此任务时),MSBuild将失败,并显示以下消息: 正在跳过目标[targetname],因为它没有输出 添加详细的详细信息告诉我原因是@(OutputXML)项为空。好吧,那现在怎么办?因此,MSBuild中的中间构建的整个概念似乎并不十分健壮 我的问题是,在没有输出的情况下,我如何获得中间构建的好处并仍然执行此目标?(我希望我不必写我自己的任务扩展) 以下是我的构建脚本的相关部分:MSBuild:目标输入和输出在第一次执行时失败,msbuild,Msbuild,我尝试在MSBuild中执行一个生成目标。目标有一些输入和输出,我把它们放在那里,以加快中间构建的时间。输入文件总是存在(头文件),而输出文件并不总是存在(XML文件) 一个可能跳过任务的中间构建是非常可取的,因为它在性能方面非常昂贵 无论如何,如果输出已经存在,那么输入和输出工作得很好。在这种情况下,MSBuild会发出一条非常有用的消息,说明目标已跳过,因为所有文件都是最新的 当输出目录和文件不存在时(第一次运行此任务时),MSBuild将失败,并显示以下消息: 正在跳过目标[targetn
<ItemGroup>
<Headers Include="..\**\*.h" />
<OutputXML Include="$(OutputDir)\*.xml" />
</ItemGroup>
<Target Name="Doxygen"
Inputs="@(Headers)"
Outputs="@(OutputXML)" >
<Exec ... />
</Target>
注:
我一直在谷歌、msdn和这个网站上寻找答案,但到目前为止都没有成功。尽管我发现了关于MSBuild的非常有用的信息。使用虚拟输出怎么样
<ItemGroup>
<Headers Include="..\**\*.h" />
<OutputXML Include="$(OutputDir)\*.xml" />
</ItemGroup>
<ItemGroup Condition="'@(OutputXML)' == ''">
<OutputXML Include="$(OutputDir)\dummy.xml" />
</ItemGroup>
<Target Name="Doxygen"
Inputs="@(Headers)"
Outputs="@(OutputXML)" >
<Exec ... />
</Target>
将OutputDir设置为dummy.xml时,即使文件不存在,它也不再为空。通配符表示您正在搜索任何.xml,但没有找到,但是命名一个特定的不会进行搜索,因此不关心它是否存在。工作得很好。谢谢,我不知道你可以重新定义相同的项目。但是效果很好!嗨,克里斯,与本帖无关。我正在与您联系以获取有关MSBuild的帮助。我是MsBuild的新手,希望能够动态生成解决方案文件。我注意到在下面的SO帖子中,你提到你有一个类似的解决方案。你能和我分享一下吗。谢谢