可以使用以下两种方法之一创建属性:
<Target Name="A">
<PropertyGroup>
<DogSound>Bark</DogSound>
</PropertyGroup>
</Target>
<Target Name="B">
<CreateProperty Value="Bark">
<Output TaskParameter="Value" PropertyName="DogSound"/>
</CreateProperty>
</Target>
但是,目标A和目标B的语义之间有什么区别(如果有)?
谢谢。
注意:我正在使用msbuild 3.5。我相信PropertyGroup语法在msbuild的早期版本中无法在目标内部运行,但ItemGroups也是如此。 CreateItem已被弃用,但CreateProperty没有,所以我想知道CreateProperty是否仍然在使用PropertyGroup方面有什么问题,如果有的话,还有什么问题。
最佳答案
不要在MSBuild 4.0中使用CreateProperty和CreateItem。而是直接将ItemGroup和PropertyGroup放置在目标内部。
您是正确的,之前不允许在目标内部使用MSBuild 3.5 ItemGroup/PropertyGroup,因此有人会使用CreateProperty和CreateItem任务。在MSBuild 3.5之后,您应该只使用ItemGroup和PropertyGroup。尽管在某些极端情况下,您可能仍需要CreateProperty和CreateItem,但是我不会担心这些。这些方案处理转义,以及CreateItem的限制比ItemGroup少。但实际上,有99%的人不会面对这一问题。