Мне интересно, почему кто-то (включая меня) беспокоится о создании безумно долгих и утомительных преобразований xdt для каждого ключа в файле web.config, когда можно просто поставить инструкция «Заменить» вместе с объявлением конфигурации.Кодирование файлов преобразования для существующих web.configs (Reinventing the wheel?)
Поясню на примере:
Вы являетесь разработчиком, что была поставлена задача создать серию web.config трансформирует для большого веб-приложения.
Вам даны web.configs для каждой среды и сказал, чтобы сделать:
- база web.config, который содержит все ключи и значения, общие для каждой среды
- наборы преобразования файлов, содержащих все ключи и значения, которые отличаются от окружающей среды к окружающей среде
Ниже приведен пример базового web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
<add key="db.schema" value="app" />
<add key="versionNumber" value="" />
<add key="culture" value="en-US" />
<add key="url" value="" />
<add key="cache.Duration" value="0" />
</appSettings>
</configuration>
Здесь есть преобразование образец для базового web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appSettings>
<add key="versionNumber"
value="01.67.00"
xdt:Transform="Replace" xdt:Locator="Match(key)"/>
<add key="url"
value="http://thisIsNotAnActualURL.com"
xdt:Transform="Replace" xdt:Locator="Match(key)" />
</appSettings>
который выдает, по желанию, следующее:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
<add key="db.schema" value="app" />
<add key="versionNumber" value="01.67.00" />
<add key="culture" value="en-US" />
<add key="url" value="http://thisIsNotAnActualURL.com" />
<add key="cache.Duration" value="0" />
</appSettings>
</configuration>
Это все справедливо и хорошо, но если вы разработчик, который создает трансформации на основе массивных web.configs, которые уже существуют, не так ли? будет намного проще сделать следующее в отличие от вышеуказанного подхода:
Base web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
</configuration>
Transform:
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xdt:Transform="Replace">
<appSettings>
<add key="db.schema" value="app" />
<add key="versionNumber" value="01.67.00" />
<add key="culture" value="en-US" />
<add key="url" value="http://thisIsNotAnActualURL.com" />
<add key="cache.Duration" value="0" />
</appSettings>
Результат идентичен предыдущий пример с гораздо меньшими затратами на работу:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
<add key="db.schema" value="app" />
<add key="versionNumber" value="01.67.00" />
<add key="culture" value="en-US" />
<add key="url" value="http://thisIsNotAnActualURL.com" />
<add key="cache.Duration" value="0" />
</appSettings>
</configuration>
Я понимаю, что, используя этот подход, когда изменения должны произойти в каждой среде, изменение должно отражаться в каждом преобразовании; но кроме этого я не вижу недостатка.
Пожалуйста, скажите мне, что я пропускаю что-то очевидное здесь, как я нахожу, что прообразы у меня ушло более 8 часов, чтобы код можно сделать в считанные секунды без явного недостатка
Почему вам нужно больше, чем один недостаток? Вы уже определили, что дублирование является проблемой. –
Поскольку способ, которым я занимаюсь в данный момент, имеет несколько недостатков, которые я уже идентифицировал. – ShaneC
Это может показаться немного душным, но я лично предпочитаю «почти невозможно безмолвно винить» более «короче». Хотя я уверен в своей способности проверять, что все файлы обновлены, я не уверен в том, что новый найм прибывает на борт через 3 месяца, чтобы ребенок сидел в проекте, не допуская ошибки. Если один из этих 'add' будет опечатан, файл конфигурации будет расти с неизмененным значением, и никто не знает, пока сервер не начнет делать что-то нечетное ... – Basic