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