如何将PropertyGroup / ItemGroup中可变数量的项传递给msbuild脚本

时间:2012-08-03 11:23:22

标签: msbuild msbuild-task msbuild-propertygroup

请阅读,直到我清楚地陈述我的问题。我正在尝试实现一个自定义的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,以便我可以使用propertygroup / itemgroup从msbuild命令行传递'n'变量参数?

msbuild somefile.csproj / t:MyTarget / p:Item1 = Name1; Item2 = Name2; ItemN = NameN('N'仅用于说明目的)

这甚至可能吗?

提前致谢,我们将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:7)

如果你这样打电话给你的构建项目......

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

项目就这样做了......

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

...您实际上已将属性转换为项目数组。如果你要转换为dymanically创建的属性,那么在你的脚本的其余部分中没有简单的方法来引用它们,因为在编写脚本时你不会提前知道它们的名字。

摘自MSBuild Trickery,技巧#30,其中包含许多关于此操作的其他详细信息页面