Удаление косой черты в генерации имени файла на основе 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))" />