可以使用以下两种方法之一创建属性:

<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%的人不会面对这一问题。

10-05 22:50