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

Cra*_*aig 2 msbuild

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

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

<PropertyGroup>
  <TestProperties>/testcontainer:%(Tests.FullPath)</TestProperties>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

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

Rit*_*ton 7

您有语法错误.项目列表通过@字符引用,项目元数据通过%引用.引用的MSBuild特殊字符参考的详细信息.要访问众所周知的项元数据,您需要在Property本身内部应用转换.

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

<PropertyGroup>
  <TestProperties>/testcontainer:@(Tests->'%(FullPath)')</TestProperties>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到更多帮助