3

現在、MSBuildproj ファイルに次のコードがあります。それは本当に簡単です。4 つの変数を定義し、MSBuild タスクを変数ごとに 1 回呼び出します。

コードください~~

<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でこれを行うことは可能ですか?

つまり、そのタスクはファイルごとに 1 回と呼ばれます .. またはそれ以上、アイテム グループ内のアイテムごとに 1 回と呼ばれますか?

4

2 に答える 2

4

アイテム メタデータを使用してタスクをバッチ処理できます ( http://msdn.microsoft.com/en-us/library/ms171474.aspxを参照)。

すべてのアイテムには、Include属性の値を含む「Identity」と呼ばれるメタデータがあります。メタデータ参照構文を使用する%(Identity)と、MSBuild は一意の Include 値ごとにタスクを実行するように指示されます。

<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項目グループの Identity メタデータを参照していることを認識していることに注意してください。それ以外の場合は、構文を使用する必要があります%(JS_File1.Identity)

于 2012-10-19T19:55:47.640 に答える
0

このように、私のコピーではなくあなたのタスクを使用することを除いて...

<?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>

それがお役に立てば幸いです。

于 2012-10-18T15:41:08.977 に答える