我有一个自定义的MSBuild任务(扩展了Microsoft.Build.Utilities.Task)。此任务具有string []类型的属性。任务本身(让我们称之为“BobTask'”)位于MSBuild文件中,该文件将其值设置如下:
<BobTask MyStringArrayProperty="@(MyStringArrayProperty)" />
我的意图是当用户从命令行运行MSBuild文件(使用MSBuild.exe)时,他们可以像这样设置属性:
msbuild.exe file.proj /p:MyStringArrayProperty="value1"
或
msbuild.exe file.proj /p:MyStringArrayProperty="value1;value2"
(是的,我知道上面的命令行示例是不完整的 - 它只是为了表明我的意图。)
但是,当我尝试真实时,我的自定义任务中的MyStringArrayProperty始终为null。我看到其他MSBuild任务使用string []属性,因此它似乎是自定义任务的有效属性类型。这让我相信我用于命令行上的字符串列表的语法是不正确的。那么,有没有办法使用命令行为自定义MSBuild任务的string []属性赋值?我需要使用一些特殊的语法吗?
谢谢,
-Craig
答案 0 :(得分:2)
您在命令行中提供属性的值,但是将项目数组的内容提供给您的任务;两者名称相同但数据类型不同。
要将属性转换为项目,请执行以下操作:
<ItemGroup>
<MyStringArrayProperty Include="$(MyStringArrayProperty)" />
</ItemGroup>
<BobTask MyStringArrayProperty="@(MyStringArrayProperty)" />
摘自书籍“MSBuild Trickery”提示#30:“如何将属性转换为项目”