5 votes

Suppression d'un slash de fin de ligne dans MSBuild / Génération de noms de fichiers par convention

J'essaie de rechercher un ensemble d'assemblages en fonction de la convention suivante dans un répertoire :

{SubDirName}\{SubDirName}.dll

J'ai commencé par créer un ItemGroup MSBuild [en mettant en lot un autre ItemGroup sur la partie .RecursiveDir].

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

Chaque élément est suivi d'une barre oblique, par exemple :

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

C'est dit :

SubDir1\;SubDir2\;SubDir3\

Maintenant, je veux générer un ensemble de noms de fichiers à partir de cette liste.

Le problème est le suivant :

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

Génère :

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

Je ne veux pas que les barres obliques soient placées avant le point dans .dll .

Quel est le moyen le plus propre d'y parvenir ?

Je sais qu'il existe un opérateur d'expression HasTrailingSlash, mais il n'y a aucun signe d'une tâche RemoveTrailingSlash dans les tâches OOTB ? Je ne suis pas pointilleux sur la version de MSBuild requise.

1voto

Avez-vous essayé

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

0voto

Ruben Bartelink Points 23945

Vous pouvez utiliser la prise en charge des méthodes .NET de MSBuild dans .NET 4.0 pour remplacer l'option "\." avec des ". "s dans le résultat final.

(Cela résoudrait au moins mon problème initial)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X