Как передать данные в свойство ITaskItem задачи MSBuild? - PullRequest
3 голосов
/ 24 марта 2009

У меня есть пользовательская задача, которую я использую в 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; }

Теперь я не уверен, какие значения мне нужно установить в свойстве CssFiles в файле MSBuild.

есть предложения?

Ответы [ 2 ]

7 голосов
/ 24 марта 2009

Я думаю, теперь вам нужно поместить файлы в список элементов с именем свойства:

<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)"/>
3 голосов
/ 24 марта 2009

Это на самом деле намного проще, просто используйте строковый массив. При указании значений, одного значения, списка, разделенного точкой с запятой (с пробелами, если хотите) или 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; }
...