在MSBuild中,为什么不';正在解析属性中的t项元数据?

在MSBuild中,为什么不';正在解析属性中的t项元数据?,msbuild,Msbuild,下面是我正在处理的MSBuild文件的一部分: <ItemGroup> <Tests Include="$(SolutionDir)\**\bin\$(TestPlatform)\$(Configuration)\*.Tests.dll" /> </ItemGroup> <PropertyGroup> <TestProperties>/testcontainer:%(Tests.FullPath)</TestProper

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

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

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

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

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

谢谢


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

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


/testcontainer:@(测试->“%(完整路径)”)

您可以找到更多帮助

,但这也不起作用:“项目列表不能与需要项目列表的其他字符串连接。请使用分号分隔多个项目列表。”我不知道您在说什么。这会像OP ASQUEST一样解析项元数据,但只有在目标内部使用时才会解析。在目标之外,它会产生我发布的错误。这是有道理的,msbuild的求值阶段会分配内容,但不会分配结果。执行阶段,即目标被执行的阶段,将导致展开,并将展开的结果放入项中。