2008-09-24 5 views
2

У меня есть приложение, зависящее от некоторых внутренних веб-сервисов, и поэтому мы хотим, чтобы наши конфигурации разработки и промежуточного уровня указывали на серверы разработки и промежуточного уровня для веб-служб.Изменить конфигурационный файл на основе констант сборки

Прямо сейчас это означает, что мы вручную редактируем файл app.config, указывая на соответствующие URL-адреса. Это не только хлопот, но и склонность к человеческой ошибке («oops, я не удаляю этот производственный URL?» Может вызвать много-проблемы).

В небольшой кучке мест в коде, я использую оператор препроцессора

#if DEBUG 
    // do something 
#endif 

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

Мне известно о сценариях после сборки, но кажется, что может быть проще, чем писать рутину для создания XML-приложения app.config каждый раз, когда я делаю сборку. Какие-либо предложения?

Это для C# и .NET 3.5, и включает в себя как старые «ссылки в Интернете», так и новые ссылки на веб-службы WCF.

ответ

3

Мы использовали для этого программу под названием XmlPreprocessor от SourceForge. Он позволяет создавать параметры в файлах конфигурации и разных файлах значений для их заполнения.

Учитывая следующие файлы:

App.config

... 
<importantSetting>$importantSettingValue$</importantSetting> 
... 

qavalues.xml

... 
<importantSettingValue>QAvalue</importantSettingValue> 
... 

prodvalues.xml

... 
<importantSettingValue>PRODvalue</importantSettingValue> 
... 

Командная строка вдоль линий следующий это все, что необходимо для получения правильных значений в правильных местах.

XmlPreProcess.exe app.config qavalues.xml 
+2

+1 Отлично! Я искал что-то вроде этого ... Это заставит мои файлы конфигурации немного уродливее, но я предпочел бы, чтобы у меня был один уродливый, чем три умеренно уродливые. (Примечание. Это относится только к файлам конфигурации, а не к женщинам). – 2009-01-27 17:09:20