我试图达到这样的目标:
<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"/>
// }
提前感谢您的帮助。
答案 0 :(得分:2)
根据您的代码,您似乎想要执行target batching,以便您可以为每个Projects
项调用两个内联任务。这是一个名为GetAndMergeCss
的批量目标的示例,假设您的GetCss
内联任务为输入添加了一个字符串,为CssFiles
列出了CssOuputs
是MergeCss
内联任务使用的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>