MSBuild: Как разыменовать свойство по значению свойства? - PullRequest
0 голосов
/ 27 июня 2018

В целях тестирования я хотел бы получить содержимое определенного свойства файла MSBuild, передав интересующее имя свойства. Допустим, у меня есть файл, подобный этому ...

Testee.proj:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">    
  <ItemGroup>
      <Foo Include="Bar" />
  </ItemGroup>
  <PropertyGroup>
      <Baz>XYZ</Baz>
  </PropertyGroup>        
</Project>

Это то, что у меня есть ...

testharness.targets:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(ProjectPath)" />

  <!--Example call: msbuild testharness.targets 
     /p:ProjectPath=Testee.proj;ItemName=Foo;OutputFileName=output.txt
     /target:GetItems
  -->        
  <Target Name="GetItems">     
    <ItemGroup>            
        <_Item Include="@($(ItemName))" />            
    </ItemGroup>        
    <WriteLinesToFile File="$(OutputFileName)" Lines="%(_Item.Identity)" Overwrite="true" />
  </Target>
</Project>

Итак, благодаря причудливому @ ($ (ItemName)) я могу разыменовать значение свойства как имя элемента. При выполнении примера вызова выше, я получаю текстовый файл с «Бар» в качестве содержимого. Но как сделать то же самое для свойств? Поэтому я хотел бы назвать что-то вроде этого:

 msbuild testharness.targets  /p:ProjectPath=Testee.proj;PropertyName=Baz;OutputFileName=output.txt /target:GetProperty

И в результате получите текстовый файл, содержащий XYZ. Я ожидаю, что $ ($ (PropertyName)) будет работать, но MSBuild этого не распознает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...