Web.Config Transform не меняет никаких значений

Я пытаюсь настроить преобразование web.config для изменения некоторых значений. Я использую этот пример, предоставленный Octopus Deploy:

http://docs.octopusdeploy.com/display/OD/Configuration+files

ультра-упрощенная версия web.config:

<?xml version="1.0" ?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <system.web>
    <compilation debug="true" targetFramework="4.0">
    </compilation>
  </system.web>
</configuration>

преобразование:

<?xml version="1.0" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>
</configuration>

выход:

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <system.web>
    <compilation debug="true" targetFramework="4.0">
    </compilation>
  </system.web>
</configuration>

Я использую этот инструмент для предварительного просмотра преобразования: https://webconfigtransformationtester.apphb.com/

как вы можете видеть, это ничего не делает. Я просмотрел много примеров, но, очевидно, что-то упускаю. Любая помощь будет принята с благодарностью.

(Я также пробовал это без везения):

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
      <compilation debug="false" xdt:Transform="Replace">
      </compilation >
  </system.web>
</configuration>

person matthew_360    schedule 08.01.2015    source источник
comment
Вы уверены в пространстве имен входного xml? Если вы измените его с xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0" на xmlns:xdt="http://schemas.microsoft.com/.NetConfiguration/v2.0", атрибут debug будет удален из вывода.   -  person matthias_h    schedule 08.01.2015
comment
спасибо, Матиас, вот и все... Я просмотрел около 10 разных ресурсов, и ни один из них не упомянул, что я должен был это сделать. Я отмечу это как ответ, если вы хотите отправить его как таковой.   -  person matthew_360    schedule 08.01.2015
comment
Что действительно расстраивает, так это то, что я использовал Visual Studio для автоматического создания файлов преобразования. Вы могли бы подумать, что было бы достаточно разумно добавить эту часть в исходный файл web.config, если бы это требовалось для преобразования.   -  person matthew_360    schedule 08.01.2015
comment
Никаких изменений в исходном файле web.config не требуется.   -  person John Saunders    schedule 08.01.2015
comment
Да, кажется, в примере этот <xdt:Import assembly="AppHarbor.TransformTester" namespace="AppHarbor.TransformTester.Transforms"/> отсутствовал в преобразовании, потому что тогда он работает без пространства имен в configuration файла web.config.   -  person matthias_h    schedule 08.01.2015


Ответы (1)


Преобразование работает, как и предполагалось, в упомянутом онлайн-инструменте предварительного просмотра для преобразований web.config https://webconfigtransformationtester.apphb.com/ при изменении пространства имен файла web.config с

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

to

<configuration xmlns:xdt="http://schemas.microsoft.com/.NetConfiguration/v2.0">

Когда это преобразование

<?xml version="1.0" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>
</configuration>

применяется к настроенному web.config

<?xml version="1.0" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <system.web>
    <compilation debug="true" targetFramework="4.0">
    </compilation>
  </system.web>
</configuration>

атрибут debug удаляется из результата:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <system.web>
    <compilation targetFramework="4.0">
    </compilation>
  </system.web>
</configuration>

Обновление: Как упоминалось в комментариях, в конфигурации файла web.config вообще не должно быть пространства имен. Вместо этого необходимо добавить этот импорт

<xdt:Import assembly="AppHarbor.TransformTester" 
            namespace="AppHarbor.TransformTester.Transforms"/>

в файл преобразования (по крайней мере, при тестировании с помощью упомянутого онлайн-тестера преобразования):

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<xdt:Import assembly="AppHarbor.TransformTester" 
     namespace="AppHarbor.TransformTester.Transforms"/>
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>
</configuration>
person matthias_h    schedule 08.01.2015
comment
Фактически, все объявление пространства имен должно быть удалено из элемента <configuration> в файле web.config. configuration не находится в пространстве имен. - person John Saunders; 08.01.2015
comment
@JohnSaunders Спасибо за информацию, только что нашел эту информацию здесь: msdn.microsoft.com/en-us/library/ee248644%28v=vs.100%29.aspx (не зная, относится ли это к используемым здесь настройкам). Ответ был дан на основе приведенного здесь примера: msdn.microsoft.com/en- нас/библиотека/dd465326.aspx - person matthias_h; 08.01.2015
comment
Вы неправильно прочитали примеры. Все примеры на этой странице относятся к файлам преобразования, а не к файлам web.config. - person John Saunders; 08.01.2015
comment
@JohnSaunders Таким образом, преобразование будет работать без пространства имен в реальном развертывании и требуется только онлайн-тестеру преобразования web.config, упомянутому в OP? Только что проверил там без пространства имен в web.config, и он не работает там, как предполагалось. - person matthias_h; 08.01.2015
comment
В их примере нет пространства имен в web.config. См. webconfigtransformationtester.apphb.com. - person John Saunders; 08.01.2015
comment
@JohnSaunders Спасибо за информацию и пример, я думаю, что только что нашел настоящий ответ, так как предыдущий ответ был скорее догадкой. Обновится через минуту. - person matthias_h; 08.01.2015