Как передать переменное количество элементов в 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' Только для целей иллюстрации)

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

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

1 ответ

Решение

Если вы называете свой проект сборки следующим образом...

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

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

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

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

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

Другие вопросы по тегам