Ми використовуємо систему, яка поєднує кілька існуючих відповідей на цій сторінці, а також спирається на цю пропозицію Скотта Хансельмана .
Коротше кажучи, ми зробили загальну програму app.config / web.config та більшість конкретних налаштувань в окремих файлах, як пропонують інші відповіді тут. наприклад, для наших налаштувань SMTP, app.config містить
<system.net>
<mailSettings>
<smtp configSource="config\smtp.config" />
</mailSettings>
</system.net>
Цей файл знаходиться під контролем джерела. Однак окремі файли, подібні до цього, не є:
<?xml version="1.0" encoding="utf-8" ?>
<smtp deliveryMethod="Network">
<network host="127.0.0.1" port="25" defaultCredentials="false" password="" userName ="" />
</smtp>
На цьому історія не зовсім закінчується. Що можна сказати про нових розробників чи про інсталяцію з новим джерелом? Основна частина конфігурації більше не контролюється джерелом, і дуже важко вручну створювати всі потрібні їм файли .config. Я вважаю за краще мати джерело, яке, принаймні, буде скомпільовано прямо з коробки.
Тому ми зберігаємо версію файлів .config у контролі джерела з назвою .config.default . Тому свіже дерево джерел виглядає так:
Тим не менше, розробнику це не дуже корисно, оскільки для Visual Studio це просто безглузді текстові файли. Отже, командний файл, copy_default_config.bat
дбає про створення початкового набору файлів .config із файлів .config.default:
@echo off
@REM Makes copies of all .default files without the .default extension, only if it doesn't already exist. Does the same recursively through all child folders.
for /r %%f in (*.default) do (
if not exist "%%~pnf" (echo Copying %%~pnf.default to %%~pnf & copy "%%f" "%%~pnf" /y)
)
echo Done.
Сценарій можна безпечно повторно запускати, оскільки розробники, які вже мають свої файли .config, не будуть їх перезаписувати. Тому можна було б запустити цей пакетний файл як подію попередньої збірки. Значення у файлах .default можуть бути не зовсім правильними для нового встановлення, але вони є розумною відправною точкою.
Врешті-решт, що закінчується у кожного розробника, це папка конфігураційних файлів, яка виглядає приблизно так:
Це може здатися трохи заплутаним, але це, безумовно, краще, ніж клопоти розробників, що наступають один одному на пальці.