这是我正在使用的简单代码。它获取目录中的所有文件夹,然后给我文件夹名称。
<TestProjectFolderPath Include="$([System.IO.Directory]::GetDirectories(`$(SolutionDir)`,`*.Tests`))" />
<TestProjectFolderNames Include="@(TestProjectFolderPath->'$([System.IO.Path]::GetDirectoryName(`$([System.IO.Path]::GetFileName(`%(Identity)`))`)',' ')" />
但是在TestProjectFolderNames [System.IO.Path]中,函数没有得到评估,只是作为字符串返回,例如:
$([System.IO.Path]::GetDirectoryName($([System.IO.Path]::GetFileName(C:\Some.Unit.Tests)))
我需要帮助才能理解正确的语法以使其正常工作。
答案 0 :(得分:1)
在转换项目时使用项目元数据上的属性函数不支持我想(也许它是最新的MSBuild版本,但我现在无法测试)。作为一种解决方法,您可以自己添加新的元数据,因为它就像一个属性,对于最近的MSBuild版本来说,一切正常:
<ItemGroup>
<TestProjectFolderPath Include="$([System.IO.Directory]::GetDirectories(`$(SolutionDir)`,`*.Tests`))" />
<TestProjectFolderPath>
<FolderName>$([System.IO.Path]::GetFileName(`%(Identity)`))</FolderName>
</TestProjectFolderPath>
</ItemGroup>
<Message Text="@(TestProjectFolderPath->'%(FolderName)', ' ')" />
编辑查看评论,根据Sherry的旧版MSBuild版本,相应的商品代码为:
<TestProjectFolderPath Include="$([System.IO.Directory]::GetDirectories($(SolutionDir),*.Tests))">
<FolderName>$([System.IO.Path]::GetFileName(%(Identity)))</FolderName>
</TestProjectFolderPath>
我遗漏了GetDirectoryName,因为在GetFileName的结果上调用它是没有意义的。