3

MSBuildで使用するカスタム タスクがあります。よく働く。以前は、いくつかのデータを受け入れるいくつかのプロパティがありましたstring。それらを に変更する必要があると提案されましたITaskItem。このように、スペースがあれば問題はありません。

前のコード

public class CompressorTask : Task
    {
    ....
    public string CssFiles { get; set; }
    public string JavaScriptFiles { get; set; }
}

msbuild ファイルの例 (例: MsBuildSample.xml)...

<CompressorTask
    CssFiles="StylesheetSample1.css, StylesheetSample2.css, 
              StylesheetSample3.css, StylesheetSample4.css"
    JavaScriptFiles="jquery-1.2.6-vsdoc.js"
... />

4 つの css ファイルがあることに注意してください。、またはスペース区切りで手動で抽出しました。キュール。

新しいコード

 public ITaskItem[] CssFiles { get; set; }
 public ITaskItem[] JavaScriptFiles { get; set; }

ここで、MSBuild ファイルの CssFiles プロパティに設定する必要がある値がわかりません。

助言がありますか?

4

2 に答える 2

7

プロパティの名前でファイルをアイテムリストに入れる必要があると思います:

<ItemGroup>
    <CssFiles Include="StylesheetSample1.css"/>
    <CssFiles Include="StylesheetSample2.css"/>
    <CssFiles Include="StylesheetSample3.css"/>
    <CssFiles Include="StylesheetSample4.css"/>
    <!-- or <CssFiles Include="*.css" /> -->
    <JavaScriptFiles Include="jquery-1.2.6-vsdoc.js"/>
</ItemGroup>
<CompressorTask CssFiles="@(CssFiles)" JavaScriptFiles="@(JavaScriptFiles)"/>
于 2009-03-24T02:55:17.933 に答える
3

これは実際にははるかに簡単です。文字列配列を使用するだけです。値を指定するときは、単一​​の値、セミコロンで区切られたリスト (必要に応じて空白を含む)、または ItemGroup (例: @(someItemGroup)) を使用します。MSBuild はこれを理解するのに十分スマートです。

<CompressorTask
    CssFiles="StylesheetSample1.css; StylesheetSample2.css;
              StylesheetSample3.css; StylesheetSample4.css"
    JavaScriptFiles="jquery-1.2.6-vsdoc.js"
... />

MSBuild タスク ソース:

public string[] CssFiles { get; set; }
public string[] JavaScriptFiles { get; set; }
于 2009-03-24T17:32:37.573 に答える