1

Мне интересно, почему кто-то (включая меня) беспокоится о создании безумно долгих и утомительных преобразований 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 часов, чтобы код можно сделать в считанные секунды без явного недостатка

+0

Почему вам нужно больше, чем один недостаток? Вы уже определили, что дублирование является проблемой. –

+0

Поскольку способ, которым я занимаюсь в данный момент, имеет несколько недостатков, которые я уже идентифицировал. – ShaneC

+0

Это может показаться немного душным, но я лично предпочитаю «почти невозможно безмолвно винить» более «короче». Хотя я уверен в своей способности проверять, что все файлы обновлены, я не уверен в том, что новый найм прибывает на борт через 3 месяца, чтобы ребенок сидел в проекте, не допуская ошибки. Если один из этих 'add' будет опечатан, файл конфигурации будет расти с неизмененным значением, и никто не знает, пока сервер не начнет делать что-то нечетное ... – Basic

ответ

0

Гипотеза была база совет, который я получил здесь, мы не решили на использование «короткий» метода преобразования из-за следующие проблемы с официальным методом:

  1. займет больше времени, чтобы код
  2. займет больше времени, чтобы редактировать
  3. Sharp кривых обучений п или разработчики, которые не имеют опыта работы с XDT
  4. Увеличивает базовый код, не разрезая на дублировании