如何将数据传递给MSBuild任务的ITaskItem属性?

Pur*_*ome 3 .net msbuild itaskitem

我有一个我在MSBuild中使用的自定义任务.效果很好.以前,我有一些属性接受了一些string数据.有人建议我应该改变它们ITaskItem.这样,如果我有空格,我应该没有问题.

以前的代码

public class CompressorTask : Task
    {
    ....
    public string CssFiles { get; set; }
    public string JavaScriptFiles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

示例msbuild文件(例如,MsBuildSample.xml)...

<CompressorTask
    CssFiles="StylesheetSample1.css, StylesheetSample2.css, 
              StylesheetSample3.css, StylesheetSample4.css"
    JavaScriptFiles="jquery-1.2.6-vsdoc.js"
... />
Run Code Online (Sandbox Code Playgroud)

请注意我是如何获得4个css文件的?我通过空间分隔符手动提取它们.KEWL.

新规范

 public ITaskItem[] CssFiles { get; set; }
 public ITaskItem[] JavaScriptFiles { get; set; }
Run Code Online (Sandbox Code Playgroud)

现在,我不确定我需要在MSBuild文件的CssFiles属性中设置什么值.

有什么建议?

Joh*_*ers 7

我想你现在需要把文件放到一个带有属性名称的itemlist中:

<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)"/>
Run Code Online (Sandbox Code Playgroud)