【问题标题】:How to pass data to an ITaskItem property of an MSBuild task?如何将数据传递给 MSBuild 任务的 ITaskItem 属性?
【发布时间】:2014-09-11 16:13:38
【问题描述】:

我有一个自定义任务,我在 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 属性中设置什么值。

有什么建议吗?

【问题讨论】:

    标签: .net msbuild itaskitem


    【解决方案1】:

    我认为您现在需要将文件放入带有属性名称的项目列表中:

    <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)"/>
    

    【讨论】:

    • 如果css文件中有空格会怎样?
    • +1。 FWIW,如果只有一个文件,我坚持使用字符串以方便使用,并在可能有多个文件时使用 ITaskItem[]。
    【解决方案2】:

    这实际上更简单,只需使用字符串数组即可。指定值时,请使用单个值、分号分隔的列表(如果您愿意,可以使用空格)或 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; }
    

    【讨论】:

    • 我曾经这样做,但我现在已经搬到 ITaskItem。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    相关资源
    最近更新 更多