MSBuild:如何通过属性值取消引用属性?

时间:2018-06-27 06:29:00

标签: testing msbuild

出于测试目的,我想通过传递我感兴趣的属性名称来检索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无法识别。

0 个答案:

没有答案