Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Removing a trailing slash in MSBuild / Convention based filename generation

I'm trying to search for a set of assemblies based on the following convention within a directory:

{SubDirName}\{SubDirName}.dll

I've started by creating an MSBuild ItemGroup [by batching another ItemGroup on the .RecursiveDir portion].

<AllAssemblies Include="$(SourceDirectory)\**\Test.*.dll" />
<Dirs Include="@(AllAssemblies->'%(RecursiveDir)')"/>

Each item has a trailing slash, i.e.:

<Message Text="@(Dirs)"/>

Says:

SubDir1\;SubDir2\;SubDir3\

Now, I want to generate a set of filenames from this list.

The problem is that:

<AssembliesByConvention Include="@(Dirs -> '%(Identity)\%(Identity).dll')" />

Generates:

SubDir1\\SubDir1\.dll;SubDir2\\SubDir2\.dll;SubDir3\\SubDir3\.dll

I dont want the slashes before the period in .dll.

What's the cleanest way to achieve this?

I know there's a HasTrailingSlash expression operator, but there's no sign of a RemoveTrailingSlash task in the OOTB Tasks?. I'm not fussy about the MSBuild version required.

like image 671
Ruben Bartelink Avatar asked Nov 14 '22 08:11

Ruben Bartelink


1 Answers

Have you tried

<AssembliesByConvention Include="@(Dirs -> '%(Identity)%(Identity).dll')" Condition="HasTrailingSlash(%(Identity))" />
<AssembliesByConvention Include="@(Dirs -> '%(Identity)\%(Identity).dll')" Condition="!HasTrailingSlash(%(Identity))" />
like image 67
Sayed Ibrahim Hashimi Avatar answered Dec 19 '22 04:12

Sayed Ibrahim Hashimi