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

发布于 2024-07-16 11:17:23 字数 840 浏览 6 评论 0原文

我有一个在 MSBuild 中使用的自定义任务。 效果很好。 以前,我有一些属性接受一些字符串数据。 有人建议我应该将它们更改为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 属性中设置什么值。

有什么建议么?

i have a custom Task which i use in MSBuild. Works great.
Previously, i had some properties which accepted some string data. It was suggested I should change them to ITaskItem's. This way, if i have spaces, i shouldn't have a problem.

Previous code

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

example msbuild file (eg. MsBuildSample.xml)...

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

Notice how i've got 4 css files? i manually extracted them by the , or space delimeter. Kewl.

New Code

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

Now, i'm not sure what values i need to set, in the CssFiles property, in the MSBuild file.

any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

莳間冲淡了誓言ζ 2024-07-23 11:17:23

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

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

I think you now need to put the files into an itemlist with the name of the property:

<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)"/>
尤怨 2024-07-23 11:17:23

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

This is actually way easier, just use a string array. When specifying the values, use a single value, a semi-colon separated list (with whitespace if you like), or an ItemGroup (e.g. @(someItemGroup)), MSBuild is smart enough to figure this out for you:

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

MSBuild task source:

public string[] CssFiles { get; set; }
public string[] JavaScriptFiles { get; set; }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文