Lawrence Barsanti
Lawrence Barsanti

Reputation: 33222

Is there an MSBuild task that will extract the path give from a file name?

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.

Upvotes: 7

Views: 3854

Answers (1)

brock.holum
brock.holum

Reputation: 3213

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.

Upvotes: 5

Related Questions