Мы используем систему, которая объединяет несколько существующих ответов на этой странице, а также опирается на это предложение Скотта Хансельмана .
Короче говоря, у нас был общий 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 files. Поэтому свежее исходное дерево выглядит так:
Тем не менее, в действительности нет никакой пользы для разработчика, поскольку для 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 могут быть не совсем правильными для новой установки, но они являются разумной отправной точкой.
В конечном итоге каждый разработчик получает папку с конфигурационными файлами, которая выглядит примерно так:
Это может показаться немного запутанным, но это определенно предпочтительнее, чем хлопоты разработчиков, наступающих друг другу на ноги.