3

我有一个自定义任务,我在MSBuild中使用。效果很好。以前,我有一些属性可以接受一些string数据。有人建议我应该将它们更改为ITaskItem's. 这样,如果我有空间,我不应该有问题。

以前的代码

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 回答