出于测试目的,我想通过传递我感兴趣的属性名称来检索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)),我能够取消引用属性值作为项目名称。执行上面的示例调用时,我得到一个以“ Bar”为内容的文本文件。 但是如何对属性做同样的事情?所以我想这样称呼:
msbuild testharness.targets /p:ProjectPath=Testee.proj;PropertyName=Baz;OutputFileName=output.txt /target:GetProperty
结果得到一个包含XYZ的文本文件。 我希望$($(PropertyName))可以工作,但是MSBuild无法识别。