我有以下MSBuild任务,它运行" CustomBuildTask"并行每个引用项目的任务:
<Target Name="CustomBuild" AfterTargets="Build">
<ItemGroup>
<CustomProjectReferences Include="@(ProjectReference)" />
</ItemGroup>
<MSBuild
Targets="CustomBuildTask"
BuildInParallel="$(BuildInParallel)"
Projects="@(CustomProjectReferences)"
Condition="'@(CustomProjectReferences)' != ''"
ContinueOnError="true">
</MSBuild>
</Target>
这似乎工作正常。但是有一种方法可以通过过滤&#34; CustomProjectReferences&#34;来改善这一点。在某种情况下。例如,只选择具有&#34; CustomBuildTask&#34;的项目。任务已定义或仅选择具有某些属性定义的任务。
我很感激帮助,因为我希望改善我的构建时间。感谢
答案 0 :(得分:0)
正如@stijn在他的评论中指出的那样,由ProjectReference
项表示的项目文件将必须由MSBuild进行评估,以便了解其中定义的所有目标和属性。这可能不值得花费性能。但是,使用XmlPeek task,您可以获得所需的数据而不会产生巨大的性能损失。根据您的需要,这对于您建议检查目标存在的场景可能足够可靠,但前提是该目标永远不会通过Import
合并,也不会有Condition
属性。属性场景会更加冒险,只有在您知道该属性永远不会通过Import
定义,从未在Target
内定义或更新,并且永远不会有Condition
属性时才会生效。如果你沿着这条路走下去,那么有用的一块拼图就是Item Functions,例如WithMetadataValue
。