tags:

views:

402

answers:

1

I use the following to get a list of project files that need to be compiled. Each project is stored in a subdirectory of the projects directory.

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

Is there a task that I can use to extract to extract the directory that each project file is in? I know I can write my own task to do this but I was hoping that one already exists and that I simply have not found it yet.

+2  A: 

If I understand the question correctly, you shouldn't need a task - you can do this with well-known meta data. Does this do the trick?

<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>

From the tests I ran, it shouldn't list a directory twice in the new item group.

muloh
For reference, you can get the complete list of MSBuild Well-known Item Metadata at http://msdn.microsoft.com/en-us/library/ms164313.aspx
Josh Sklare