我可以做一个MSBuild文件中的循环?(Can I do a loop in an MSBuild

2019-09-24 06:26发布

目前,我有他在下面的代码MSBuild PROJ文件。 这真的很简单。 定义4个变量 ,并调用我的MSBuild任务一次每变量:

代码请~~

<ItemGroup><JS_File1 Include="file1.js"/></ItemGroup>
<ItemGroup><JS_File1 Include="file2.js"/></ItemGroup>
<ItemGroup><JS_File1 Include="file3.js"/></ItemGroup>
<ItemGroup><JS_File1 Include="file4.js"/></ItemGroup>

<JavaScriptCompressorTask SourceFiles="@(JS_File1)" OutputFile="@(JS_File1).min"/>
<JavaScriptCompressorTask SourceFiles="@(JS_File2)" OutputFile="@(JS_File2).min"/>
<JavaScriptCompressorTask SourceFiles="@(JS_File3)" OutputFile="@(JS_File3).min"/>
<JavaScriptCompressorTask SourceFiles="@(JS_File4)" OutputFile="@(JS_File4).min"/>

平平淡淡的。

我想知道,这可能进行重构,以这样的事。

故障伪代码~~

<ItemGroup>
    <JS_File1 Include="file1.js"/>
    <JS_File1 Include="file2.js"/>
    <JS_File1 Include="file3.js"/>
    <JS_File1 Include="file4.js"/>
</ItemGroup>

<!-- now this is the shiz i have no idea about -->
foreach(@(JS_Files))
    <JavaScriptCompressorTask SourceFiles="@(theFile)" OutputFile="@(theFile).min"/>

是否有可能做到这一点,在MSBuild的?

因此,该任务被调用一次,每个文件..或者更重要的是,一旦每项功能于该项目组?

Answer 1:

您可以使用项目的元数据批量任务(见http://msdn.microsoft.com/en-us/library/ms171474.aspx )。

所有项目有一个名为“身份”,其中包含了包含属性值的元数据。 如果您使用的元数据参照语法%(Identity) ,将指导的MSBuild执行你的任务为每个唯一包含值。

<ItemGroup>
    <JS_File1 Include="file1.js"/>
    <JS_File1 Include="file2.js"/>
    <JS_File1 Include="file3.js"/>
    <JS_File1 Include="file4.js"/>
</ItemGroup>

<JavaScriptCompressorTask SourceFiles="@(JS_File1)" OutputFile="%(Identity).min"/>

需要注意的是的MSBuild知道你引用的JS_File1项目组的身份元数据,因为你在任务中引用它。 否则,你将需要使用语法%(JS_File1.Identity)



Answer 2:

与此类似,除了用你的任务不是我的副本....

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Minifier" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <Target Name="Minifier">
    <ItemGroup>
      <JS_File1 Include="file1.js"/>
      <JS_File1 Include="file2.js"/>
      <JS_File1 Include="file3.js"/>
      <JS_File1 Include="file4.js"/>
    </ItemGroup>

    <Copy SourceFiles="@(JS_File1)" DestinationFiles="@(JS_File1->'%(Filename).min')"/>

  </Target>
</Project>

希望这就是帮助。



文章来源: Can I do a loop in an MSBuild file?