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 e开发者_StackOverflow社区xpression operator, but there's no sign of a RemoveTrailingSlash task in the OOTB Tasks?. I'm not fussy about the MSBuild version required.
Have you tried
<AssembliesByConvention Include="@(Dirs -> '%(Identity)%(Identity).dll')" Condition="HasTrailingSlash(%(Identity))" />
<AssembliesByConvention Include="@(Dirs -> '%(Identity)\%(Identity).dll')" Condition="!HasTrailingSlash(%(Identity))" />
You can use MSBuild's .NET methods support in .NET 4.0 to replace the "\."
s with "."s in the final result.
(This would at least solve my original problem)
精彩评论