2

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

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

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

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

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

谢谢

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

4

1 回答 1

7

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

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

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

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

于 2012-04-14T05:06:05.833 回答