MSBuild - 按条件获取项目列表

时间:2017-11-13 13:03:59

标签: msbuild

我有以下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;的项目。任务已定义或仅选择具有某些属性定义的任务。

我很感激帮助,因为我希望改善我的构建时间。感谢

1 个答案:

答案 0 :(得分:0)

正如@stijn在他的评论中指出的那样,由ProjectReference项表示的项目文件将必须由MSBuild进行评估,以便了解其中定义的所有目标和属性。这可能不值得花费性能。但是,使用XmlPeek task,您可以获得所需的数据而不会产生巨大的性能损失。根据您的需要,这对于您建议检查目标存在的场景可能足够可靠,但前提是该目标永远不会通过Import合并,也不会有Condition属性。属性场景会更加冒险,只有在您知道该属性永远不会通过Import定义,从未在Target内定义或更新,并且永远不会有Condition属性时才会生效。如果你沿着这条路走下去,那么有用的一块拼图就是Item Functions,例如WithMetadataValue