Как использовать свойство MSbuild в задаче TransformXml? - PullRequest
3 голосов
/ 05 августа 2011

Я использую MsBuild и задачу TransformXml для настройки некоторых файлов web.config. Это все работает совершенно нормально, но теперь я хочу расширить свойство MSBuild в преобразовании xml.

Чтобы быть более понятным, я пакетирую задачу TransformXml, используя группу элементов, чтобы выполнить несколько преобразований для нескольких веб-сайтов, которые просто отличаются по конфигурации:

<PropertyGroup>
  <WebsiteTargetDirectory>$(MSBuildProjectDirectory)\BUILD\</WebsiteTargetDirectory>
</PropertyGroup>

<ItemGroup>
  <WebsitesToBeCopied Include="CH;DE;EN">
    <InProject>false</InProject>
  </WebsitesToBeCopied>
</ItemGroup>

<target name="CreateWebConfigs">
  <TransformXml
    Source="$(MSBuildProjectDirectory)\Web.Template.config"
    Transform="$(MSBuildProjectDirectory)\Web.%(WebsitesToBeCopied.Identity).config"
    Destination="$(WebsiteTargetDirectory)\%WebsitesToBeCopied.Identity)\Web.config"
  />
</target>

Это работает совершенно нормально, но я мог бы сэкономить несколько строк и преобразований, если бы была возможность получить некоторые свойства MSBuild в преобразовании. Например, мне нужно добавить 'DE', 'EN' или 'CH' к значению атрибута, и было бы неплохо просто использовать заполнитель в шаблоне вместо того, чтобы писать преобразование для каждого web.config.

Есть ли способ достичь этого, и если да, то как это будет работать?

1 Ответ

4 голосов
/ 08 августа 2011

Я нашел обходное решение самостоятельно.

Сразу после задачи TransformXml я могу использовать задачу Detokenise из MSBuildExtensionPack , чтобы поместить мои переменные в преобразованныйфайл на втором этапе.Мне просто нужно использовать оригинальный синтаксис $ (PropertyName) в качестве заполнителей в файле, и дополнительные задачи автоматически заменяют их.

...