msbuild, перезаписывая значение свойства в другом файле

Я пытаюсь изменить значение свойства в зависимости от определенного условия в другом файле. Например У меня есть один файл, который вызывает целевой файл.

<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>

Но когда я печатаю "Персона", я получаю пустую строку. И я проверил, что "SetName" вызывается и правильное имя установлено. Что мне здесь не хватает?

2 ответа

Решение

Это связано с доступностью свойств MSBuild в зависимости от того, используете ли вы DependsOnTargets или CallTarget. При использовании DependsOnTargets у вас будет больший доступ к свойствам. Вот почему ваш пример работает при использовании этого метода.

Существует существующая статья stackru, в которой говорится об этой проблеме.

Он отлично работает, используя атрибут "DependsOnTarget" вместо задачи callTarget

Другие вопросы по тегам