Страницы

среда, 25 января 2012 г.

MSBuild. TransformXml. Маленькая, но весьма досадная проблема.

  Недавно пришлось занимать простой вещью: есть проект, есть шаблон конфигурации. И для каждого развертывания системы надо заполнить свой шаблон. Ок, у нас есть решение. Берём TransformXml-Task для msbuild, и трансформируем конфиг:
<TransformXml 
  Source="someapp.config" 
  Transform="transform.xml" 
  Destination="someapp.config" />
  Выглядит просто, не так ли? Увы только выглядит. Сама по себе задача преобразования работает замечательно, только вот  TransformXml блокирует... Source! Чтобы понять, как это приятно попробуйте наложить несколько трансформаций на один файл. В итоге у меня вышло нечто подобное:
<Copy 
  SourceFiles="someapp.config" 
  DestinationFiles="someapp.config.1"/>
<TransformXml 
  Source="someapp.config.1" 
  Transform="transform1.xml" 
  Destination="someapp.config" />
<Copy   SourceFiles="someapp.config"   DestinationFiles="someapp.config.2"/> <TransformXml   Source="someapp.config.2"   Transform="transform2.xml"   Destination="someapp.config" />
Не очень элегантно. И временные файлы нельзя удалить в процессе работы msbuild - они заблокированы. Весьма, весьма досадный баг, и молниеносная реакция на него. Может кто-нибудь знает способ лучше?

2 комментария:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. Создай отдельно файл шаблона someApp.template.config и файл конфигурации someApp.config. Файл конфигурации наполняй из шаблона:



    Мне еще нужно было обновить конфигурацию рядом с скомпилированным файлом поэтому у меня еще так:


    ОтветитьУдалить