Удаление косой черты в генерации имени файла на основе MSBuild / Convention

Я пытаюсь найти набор сборок на основе следующего соглашения в каталоге:

{SubDirName}\{SubDirName}.dll

Я начал с создания MSBuild ItemGroup [путем пакетирования другой ItemGroup в части.RecursiveDir].

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

Каждый элемент имеет косую черту, т.е.

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

Говорит:

SubDir1\;SubDir2\;SubDir3\

Теперь я хочу создать набор имен файлов из этого списка.

Проблема в том, что:

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

Формирует:

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

Я не хочу косые черты до периода в .dll,

Какой самый чистый способ достичь этого?

Я знаю, что есть оператор выражения HasTrailingSlash, но в задачах OOTB нет никаких признаков задачи RemoveTrailingSlash?. Я не суетливый по поводу требуемой версии MSBuild.

2 ответа

Решение

Вы можете использовать поддержку методов.NET MSBuild в.NET 4.0 для замены "\."с "." в конечном результате.

(Это по крайней мере решило бы мою первоначальную проблему)

Ты пытался

<AssembliesByConvention Include="@(Dirs -> '%(Identity)%(Identity).dll')" Condition="HasTrailingSlash(%(Identity))" />
<AssembliesByConvention Include="@(Dirs -> '%(Identity)\%(Identity).dll')" Condition="!HasTrailingSlash(%(Identity))" />
Другие вопросы по тегам