我有一个自定义任务,我在 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文件?我通过空间分隔符手动提取它们。 KEWL。
public ITaskItem[] CssFiles { get; set; }
public ITaskItem[] JavaScriptFiles { get; set; }
现在,我不确定我需要在MSBuild文件的CssFiles属性中设置什么值。
有什么建议吗?
答案 0 :(得分: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)"/>
答案 1 :(得分: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; }