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

标签 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”仅用于说明目的)

这可能吗?

提前致谢,我们将不胜感激任何帮助。

最佳答案

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

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

该项目就是这样做的......

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

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

摘自MSBuild Trickery ,技巧#30,其中有很多页关于此操作的附加细节

关于msbuild - 如何将 PropertyGroup/ItemGroup 中可变数量的项目传递给 msbuild 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11794756/

相关文章:

.net - 如何使 MSBuild 自动将所有间接引用复制到输出 (bin) 文件夹

deployment - Teamcity 部署 : pass Revision Number to MSBuild

Windows systemprofile 目录根据用户显示不同

visual-studio - 错误 MSB4061 : The "XamlCTask" task could not be instantiated

msbuild - 如何使用msbuild替换文件中的字符串?

MSBuild 多个输出路径

MSbuild,如何访问内联任务代码中的项目属性值?

delphi - 如何使用 MSBuild 和 Delphi XE2 进行构建

reflection - 单独 AppDomain 中的内联 MS 构建任务

msbuild - 输出 MSBuild 变量时遇到问题