Usamos um sistema que combina várias das respostas existentes nesta página, além de recorrer a esta sugestão de Scott Hanselman .
Resumindo, o que fizemos foi ter um app.config / web.config comum e ter a maioria das configurações específicas em arquivos individuais, conforme sugerido por outras respostas aqui. por exemplo, para nossas configurações de SMTP, o app.config contém
<system.net>
<mailSettings>
<smtp configSource="config\smtp.config" />
</mailSettings>
</system.net>
Este arquivo está no controle de origem. No entanto, os arquivos individuais, como este, não são:
<?xml version="1.0" encoding="utf-8" ?>
<smtp deliveryMethod="Network">
<network host="127.0.0.1" port="25" defaultCredentials="false" password="" userName ="" />
</smtp>
Mas não é bem aí que a história termina. E quanto a novos desenvolvedores ou uma nova instalação de código-fonte? A maior parte da configuração não está mais no controle de origem, e é uma dor construir manualmente todos os arquivos .config de que precisam. Eu prefiro ter uma fonte que pelo menos compile direto da caixa.
Portanto, mantemos uma versão dos arquivos .config no controle de origem, denominados arquivos .config.default . Uma nova árvore de origem, portanto, tem a seguinte aparência:
Ainda assim, não tem nenhuma utilidade para o desenvolvedor, já que para o Visual Studio eles são apenas arquivos de texto sem sentido. Portanto, o arquivo em lote copy_default_config.bat
,, se encarrega de criar um conjunto inicial de arquivos .config a partir dos arquivos .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.
O script pode ser reexecutado com segurança, pois os desenvolvedores que já possuem seus arquivos .config não os substituirão. Portanto, pode-se concebivelmente executar esse arquivo em lote como um evento de pré-construção. Os valores nos arquivos .default podem não ser exatamente corretos para uma nova instalação, mas são um ponto de partida razoável.
Em última análise, o que cada desenvolvedor acaba tendo é uma pasta de arquivos de configuração que se parece com isto:
Pode parecer um pouco complicado, mas é definitivamente preferível ao incômodo de desenvolvedores pisando nos calos dos outros.