msbuild,覆盖不同文件中的属性值

时间:2013-02-06 21:58:08

标签: msbuild msbuild-propertygroup msbuild-target

我正在尝试根据另一个文件中的某些条件修改属性值。 对于前者 我有一个文件调用目标文件。

<Import Project="sample.vcxproj"/>
<PropertyGroup>
    <Gender>Boy</Gender>
    <Search>UNIQUE_NAME</Search>
</PropertyGroup>

<Target Name="Build">
    <callTarget Targets="SetName"/>
    <Message Text="$(Person)"/>
</Target>

我有一个文件包含要决定的项目组和修改

的目标
<ItemGroup>
    <Name Include="UNIQUE_NAME">
        <Boy>DAVID</Boy>
        <Girl>REBECCA</Girl>
    </NAME>
</ItemGroup>

<Target Name="SetName">
    <PropertyGroup Condition="'$(Search)'=='@(Name)'">
        <Person>@(Name->'%($(Gender))')</Person>
    </PropertyGroup>
</target>

但是当我打印'Person'时,我得到空字符串。我检查了'SetName'被调用并且设置了正确的名称。 我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

这与MSBuild属性的可访问性有关,具体取决于您使用的是 DependsOnTargets 还是 CallTarget 。使用 DependsOnTargets 时,您可以更好地访问属性。这就是为什么您的示例在使用该方法时有效。

现有stackoverflow article可以解决此问题。

答案 1 :(得分:0)

使用'DependsOnTarget'attrib而不是callTarget任务可以正常工作