Метаданные элемента синтаксического анализа MSBuild

Есть ли способ изменить каждый элемент в группе элементов? Например, по этому пункту:

<_CustomAreas Include="..\My.Project.*\Areas\**\*.*" Condition="'$(AppBuildFolder)' == ''" />

Я хочу удалить часть "..\My.Product.*. В основном у нас есть отдельный проект, содержащий области MVC, и в Package/Deployment (MSDeploy) мы хотим скопировать их в основной проект. Здесь используется группа :

<FilesForPackagingFromProject Include="%(_CustomAreas.Identity)">
    <DestinationRelativePath>Areas\%(relativedir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>

$(relativedir) проходит как "..\My.Project.Plugin1\Areas**." и заканчивается в пакете как ZipFileRoot\My.Project.Plugin1\Areas (.. выходит из жестко закодированных областей, а затем просто создает папку для плагинов\областей), где я бы хотел, чтобы все они оказались в ZipFileRoot\Areas.

Спасибо, Энди.


person Andy    schedule 05.01.2011    source источник


Ответы (3)


RegexReplace (учетные данные: гость/гость) должна иметь возможность сопоставлять \My.Product.* и заменять пустой строкой.

Что-то вроде этого должно работать: (не проверено, нужно проверить экранирование)

<RegexReplace Input="%(_CustomAreas)" Expression="\\My\.Product\..*" Replacement="" Count="-1">
    <Output ItemName="_CustomAreas" TaskParameter="Output" />
</RegexReplace>

Придется немного потрудиться, чтобы запустить и запустить задачи сообщества MSBuild, но там достаточно полезного, чтобы найти его. Стоит усилий.

person si618    schedule 06.01.2011

С MsBuild 4.0 вы можете использовать методы String непосредственно в своем скрипте (или использовать встроенные задачи). С помощью этой опции вы можете отредактировать свой относительный каталог, чтобы удалить часть My.Project.*.

Вы можете увидеть примеры в этой статье: http://sedodream.com/2010/03/07/MSBuild40PropertyFunctionsPart1.aspx

person Benjamin Baumann    schedule 06.01.2011
comment
Мне тоже нравится этот ответ, но мне было непонятно, как работать с ItemGroup. - person Andy; 06.01.2011

Элементы в ItemGroups могут иметь атрибут Exclude, который позволяет указать элементы, которые следует исключить.

person C Johnson    schedule 11.05.2013
comment
Это не то, что я просил сделать. - person Andy; 11.05.2013