请阅读,直到我清楚地陈述我的问题。我正在尝试实现一个自定义的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'仅用于说明目的)
这甚至可能吗?
提前致谢,我们将非常感谢您的帮助。
答案 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,其中包含许多关于此操作的其他详细信息页面