在MSBuild中,为什么不';正在解析属性中的t项元数据?
下面是我正在处理的MSBuild文件的一部分:在MSBuild中,为什么不';正在解析属性中的t项元数据?,msbuild,Msbuild,下面是我正在处理的MSBuild文件的一部分: <ItemGroup> <Tests Include="$(SolutionDir)\**\bin\$(TestPlatform)\$(Configuration)\*.Tests.dll" /> </ItemGroup> <PropertyGroup> <TestProperties>/testcontainer:%(Tests.FullPath)</TestProper
<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的求值阶段会分配内容,但不会分配结果。执行阶段,即目标被执行的阶段,将导致展开,并将展开的结果放入项中。