как передать переменное количество элементов в PropertyGroup / ItemGroup в скрипт msbuild

Пожалуйста, прочтите, пока я не сформулирую свой вопрос четко. Я пытаюсь реализовать настраиваемую задачу msbuild, которая будет принимать переменное количество входных параметров из сценария msbuild. Мне известны массивы входных параметров в таможенных задачах

public ITaskItem[] ArrayofItems { get; set; }

Их можно объявить следующим образом, используя либо propertygroup / itemgroup.

<PropertyGroup>
<Item1>1</Item>
<Item2>2</Item>
<Item3>3</Item>
<Item4>4</Item>
<Item5>5</Item></PropertyGroup>

 <ItemGroup>
<File Include="1"></File>
<File Include="2"></File>
<File Include="3"></File>
<File Include="4"></File>
<File Include="5"></File>  </ItemGroup>

Затем из командной строки VS 2010 я могу установить / переопределить свойство следующим образом

msbuild somefile.csproj / t: MyTarget /p:Item1=Name1;Item2=Name2...etc

Мой вопрос: - Можно ли объявить переменное количество propertygroup / itemgroup в файле сборки, чтобы я мог передать параметры переменной 'n' из командной строки msbuild примерно так, используя propertygroup / itemgroup?

msbuild somefile.csproj / t: MyTarget / p: Item1 = Name1; Item2 = Name2; ItemN = NameN ('N' только для иллюстрации)

Это вообще возможно?

Заранее спасибо, любая помощь будет принята с благодарностью.


person Hamza Ahmed Zia    schedule 03.08.2012    source источник


Ответы (1)


Если вы назовете свой проект сборки вот так ...

> msbuild My.proj /p:ItemProperty="1;2;3;4;5"

И проект делает это ...

<ItemGroup>
    <FromProperty Include="$(ItemProperty)" />
</ItemGroup>
<Message Text="%(FromProperty.Identity)" />

... вы фактически преобразовали свойство в массив элементов. Если бы вам пришлось преобразовать в динамически созданные свойства, не было бы простого способа ссылаться на них в остальной части вашего скрипта, поскольку вы не знали бы их имена заранее, когда скрипт создается.

Взято из MSBuild Trickery, трюка № 30, у которого много страницы с дополнительной информацией об этой манипуляции

person Brian Kretzler    schedule 04.08.2012