2010-07-22 2 views
3

Я пытаюсь найти набор сборок на основе следующей конвенции в каталоге:Удаление слэш в MSBuild/Конвенции на основе имени файла поколения

{SubDirName}\{SubDirName}.dll 

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

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

Каждый элемент имеет слэш, т.е .:

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

Says:

SubDir1\;SubDir2\;SubDir3\ 

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

Проблема заключается в том, что:

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

Формирует:

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

Я не хочу, косую черту перед периодом .dll.

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

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

ответ

0

Вы можете использовать методы .NET MsBuild поддерживают в .NET 4.0 для замены "\." с с «» с в конечном итоге.

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

1

Вы пробовали

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

Thanks Sayed. К сожалению, значение имеет завершающий слэш (как это исходит от RecursiveDir), и я хочу вставить его в имя файла (я получаю двойную обратную косую черту между битами dir, и ваше лекарство вылечило бы это - но, конечно, это молча игнорируется в любом случае - помните это не для pretiness, его coz оно не работает!). –

Смежные вопросы