以下是我正在处理的 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值是绝对路径。但是,我仍然想了解这个问题,以及如何处理它。
答案 0 :(得分:7)
您遇到语法错误。项目列表通过@字符引用,项目元数据通过%引用。有关详细信息,请参阅MSBuild Special Character Reference。要访问众所周知的项元数据,您需要在Property本身内部应用转换。
<ItemGroup>
<Tests Include="MyFile.txt" />
</ItemGroup>
<PropertyGroup>
<TestProperties>/testcontainer:@(Tests->'%(FullPath)')</TestProperties>
</PropertyGroup>
您可以找到更多帮助here