Как передать переменное количество элементов в 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, который содержит множество страниц дополнительной информации об этой манипуляции