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

msbuild,覆盖不同文件中的属性值,msbuild,msbuild-propertygroup,msbuild-target,Msbuild,Msbuild Propertygroup,Msbuild Target,我试图根据另一个文件中的特定条件修改属性值。 例如。 我有一个文件调用目标文件 <Import Project="sample.vcxproj"/> <PropertyGroup> <Gender>Boy</Gender> <Search>UNIQUE_NAME</Search> </PropertyGroup> <Target Name="Build"> <callT

我试图根据另一个文件中的特定条件修改属性值。 例如。 我有一个文件调用目标文件

<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”,是否设置了正确的名称。
我这里缺少什么?

使用'DependsOnTarget'属性而不是callTarget任务可以很好地工作

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

有一种现有的方法可以说明这个问题