4

请阅读,直到我清楚地说明我的问题。我正在尝试实现一个自定义 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...等

我的问题是: - 是否可以在构建文件中声明可变数量的属性组/项目组,以便我可以使用属性组/项目组从 msbuild 命令行中传递“n”个可变参数?

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

这甚至可能吗?

在此先感谢,任何帮助将不胜感激。

4

1 回答 1

7

如果你这样调用你的构建项目......

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

而这个项目就是这样做的......

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

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

摘自MSBuild Trickery,技巧 #30,其中包含有关此操作的许多附加详细信息

于 2012-08-04T18:39:24.767 回答