在MSBuild中,为什么属性中的Item Metadata不能被解析?

时间:2012-04-13 23:45:09

标签: msbuild

以下是我正在处理的 MSBuild 文件的一部分:

<ItemGroup>
  <Tests Include="$(SolutionDir)\**\bin\$(TestPlatform)\$(Configuration)\*.Tests.dll" />
</ItemGroup>

<PropertyGroup>
  <TestProperties>/testcontainer:%(Tests.FullPath)</TestProperties>
</PropertyGroup>

我希望拥有一个包含命令行开关的属性。但是,当我尝试在 Exec Command 字符串中使用$(TestProperties)时,%(Tests.FullPath)永远不会解析为测试项的绝对路径。相反,它始终按字面处理,"%(Tests.FullPath)"

我做错了什么或者这是标准的 MSBuild 行为?如果是后者,我有办法解决这个问题吗?

由于

P.S。 - 我意识到我可能不需要访问FullPath属性,因为我的Include值是绝对路径。但是,我仍然想了解这个问题,以及如何处理它。

1 个答案:

答案 0 :(得分:7)

您遇到语法错误。项目列表通过@字符引用,项目元数据通过%引用。有关详细信息,请参阅MSBuild Special Character Reference。要访问众所周知的项元数据,您需要在Property本身内部应用转换。

<ItemGroup>
  <Tests Include="MyFile.txt" />
</ItemGroup>

<PropertyGroup>
  <TestProperties>/testcontainer:@(Tests->'%(FullPath)')</TestProperties>
</PropertyGroup>

您可以找到更多帮助here