msbuild循环中的2个任务

时间:2014-09-09 21:27:59

标签: msbuild msbuild-4.0

我试图达到这样的目标:

<ItemGroup>
       <Projects Include="projectpath1"/>
       <Projects Include="projectpath2"/>
       ...
<ItemGroup/>

// foreach project {
<GetCss Project=%Project.Identity CssOutputs=@CssFiles/>
<MergeCss CssInputs=@CssFiles CssOutputFile="test.css"/>
 // } execute GetCss then MergeCss foreach project 

GetCss和MergeCss是自定义内联任务。

我不想要:

// foreach project {
    <GetCss Project=%Project.Identity CssOutputs=@CssFiles/>
// }
// foreach project {
    <MergeCss CssInputs=@CssFiles CssOutputFile="test.css"/>
  // }

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

根据您的代码,您似乎想要执行target batching,以便您可以为每个Projects项调用两个内联任务。这是一个名为GetAndMergeCss的批量目标的示例,假设您的GetCss内联任务为输入添加了一个字符串,为CssFiles列出了CssOuputsMergeCss内联任务使用的MSBuild项目:

<ItemGroup>
  <Projects Include="projectpath1"/>
  <Projects Include="projectpath2"/>
</ItemGroup>

<Target Name="GetAndMergeCss" Outputs="%(Projects.Identity)">

  <PropertyGroup>
    <ThisProjectIdentity>%(Projects.Identity)</ThisProjectIdentity>
  </PropertyGroup>

  <Message Text="Preparing to get and merge css for project:  $(ThisProjectIdentity)" />

  <GetCss Project="$(ThisProjectIdentity)" CssOutputs="@(CssFiles)"/>
  <!--Or this works too...<GetCss Project="%(Projects.Identity)" CssOutputs="@(CssFiles)"/>-->

  <MergeCss CssInputs="@(CssFiles)" CssOutputFile="test.css"/>

</Target>