是否存在将从文件名中提取给定路径的MSBuild任务?

是否存在将从文件名中提取给定路径的MSBuild任务?,msbuild,Msbuild,我使用以下命令来获取需要编译的项目文件列表。每个项目都存储在projects目录的子目录中 <ItemGroup> <dprs Include="c:\projects\**\*.dpr" /> </ItemGroup> 是否有一个任务可以用来提取每个项目文件所在的目录?我知道我可以写我自己的任务来做这件事,但我希望一个已经存在,我只是还没有找到它 如果我正确理解了这个问题,你就不需要任务了——你可以用著名的元数据来完成。这能奏效吗 &

我使用以下命令来获取需要编译的项目文件列表。每个项目都存储在projects目录的子目录中

<ItemGroup>
   <dprs Include="c:\projects\**\*.dpr" />      
</ItemGroup>


是否有一个任务可以用来提取每个项目文件所在的目录?我知道我可以写我自己的任务来做这件事,但我希望一个已经存在,我只是还没有找到它

如果我正确理解了这个问题,你就不需要任务了——你可以用著名的元数据来完成。这能奏效吗

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
    <ItemGroup>
        <dprs Include="c:\projects\**\*.dpr" />      
    </ItemGroup>

    <Target Name="Default">
      <CreateItem Include="%(dprs.RelativeDir)">
        <Output ItemName="_ProjectFileLocations" TaskParameter="Include" />
      </CreateItem>
      <Message Text="@(_ProjectFileLocations->'%(FullPath)', '%0D%0A')" />
    </Target>
</Project>


从我运行的测试中,它不应该在新项组中列出两次目录。

作为参考,您可以在以下位置获得MSBuild已知项元数据的完整列表: