В целях тестирования я хотел бы получить содержимое определенного свойства файла 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 этого не распознает.