2017-09-14 50 views
0

是否可以将动态属性组传递给MSbuild任务?所以,如果我有以下属性和值:如何将动态属性传递给MSbuild任务?

<MyPropertyGroup> 
    <Foo>bar</Foo> 
    <Foo1>bar1</Foo1> 
    <Foo2>bar2</Foo2> 
</MyPropertyGroup> 

我可以打电话的MSBuild用短属性列表:

<MSBuild Projects="$(SolutionFile)" Targets="Build" Properties="MyPropertyGroup" /> 

但它会与调用这样的任务:

<MSBuild Projects="$(SolutionFile)" Targets="Build" Properties="Foo=bar;Foo1=bar1;Foo2=bar2" /> 

如果有一个大的属性列表,并且只允许需要维护1个位置,这会很有帮助。

回答

1

这里有两个问题:

  • 属性不进行分组,任何<PropertyGroup>元素只是用来定义属性。经过评估之后,所有属性都是没有任何分组的键值对列表,因此即使是<PropertyGroup Label="my groups">也不会影响其包含的属性。
  • 项目可用于将更多元数据值添加到相同的“密钥”(项目标识)。但是,迭代自定义元数据只能在msbuild任务(=>代码)中完成,而不能直接在MSBuild中完成,需要定制任务和构建逻辑(请参见this question)。

最实用的解决问题的方法是定义一个包含所有值的单个属性:

<PropertyGroup> 
    <BuildParameters> 
    Configuration=Debug; 
    Platform=Any CPU; 
    SomeOtherProperty=Foo 
    </BuildParameters> 
</PropertyGroup> 
… 
<PropertyGroup> 
    <!-- this property can even be extended afterwards, e.g. when a condition is needed --> 
    <BuildParameters Condition=" '$(ShallAppendThings)' == 'true' "> 
    $(BuildParameters); 
    AnotherProperty=SomeValue 
    </BuildParameters> 
</PropertyGroup> 
… 

<MSBuild Projects="$(SolutionFile)" Targets="Build" Properties="$(BuildProperties)" /> 
+0

正是我一直在寻找,谢谢! – nichos

相关问题