позволить msbuild генерировать имена целевых файлов из имен исходных файлов

Я пытаюсь понять, как использовать MSBuild для создания набора dll из набора файлов конфигурации. То есть у меня есть какие-то конфиги

Policy.1.1.mylib.config
Policy.1.2.mylib.config
...
Policy.1.x.mylib.config

и в цели msbuild я хотел бы вызвать задачу AL (компоновщик сборки) со списком этих файлов со значением параметра Outputfile (Policy.1.i.mylib.dll для каждого i = 1, ..., x), сгенерированным динамически из соответствующего параметра файла конфигурации. (Все остальные параметры мне явно известны, поэтому я могу ввести их напрямую).

У меня нет большого опыта работы с MSBuild. Я понял, как запустить задачу AL в цели после сборки для одного файла и как получить список имен файлов конфигурации в список, и я думаю, что смогу перебрать этот список с помощью пакетной обработки, но я m застрял, когда дело доходит до создания имени целевого файла из имени исходного файла.

(Примечание: это msbuild 3.5, поэтому, по-видимому, здесь нет манипуляций со строками, как в 4.0. Кроме того, установка дополнительных библиотек из сети для меня не вариант.)

Какие-либо предложения? Возможно, подход как таковой не очень подходит для MSBuild, и я просто не вижу правильного способа сделать это. Файлы конфигурации генерируются программно, может быть, мне следует просто в дополнение к ним создать набор файлов для обработки, каждый из которых содержит входные и выходные имена для всех, и прочитать их с помощью MSBuild?


person Thomas    schedule 12.06.2012    source источник


Ответы (2)


Вы бы сгруппировали конфигурации с помощью ItemGroup, и это дало бы вам доступ в метаданные для цикла, подобного foreach, и воссоздания имени dll, например <Task Input="%(Configs.FullName)" Output="%(Configs.RelativeDir)\%(Configs.Filename).dll" />

person Ilya Kozhevnikov    schedule 12.06.2012
comment
Спасибо, я смог получить доступ к %(Config.Filename) в моей задаче ‹AL›‹/›. «Полное имя» не сработало, однако вместо него я использовал %(Configs.identity) — выражение, с которым столкнулся случайно. Я довольно долго искал что-то подобное, есть ли где-нибудь ссылка, какие атрибуты (например, .Filename) доступны для этого типа списка? - person Thomas; 13.06.2012
comment
Да, ссылка на метаданные в ответе представляет собой список известных атрибутов метаданных элемента. - person Ilya Kozhevnikov; 13.06.2012

Если вы просто хотите создать список имен файлов сборки, создайте их в группе элементов, объединив имена файлов конфигурации:

<ItemGroup>
    <ConfigFiles Include="Path\to\Policy.*.config" />
    <Assemblies Include="%(ConfigFiles.Filename).dll" />
</ItemGroup>

Группа элементов Assemblies будет содержать

Policy.1.1.mylib.dll
Policy.1.2.mylib.dll
...
Policy.1.x.mylib.dll
person Aaron Jensen    schedule 12.06.2012