Usamos un sistema que combina varias de las respuestas existentes en esta página y se basa en esta sugerencia de Scott Hanselman .
En resumen, lo que hicimos fue tener una app.config / web.config común y tener la mayoría de las configuraciones específicas en archivos individuales, como lo sugieren otras respuestas aquí. por ejemplo, para nuestra configuración SMTP, el archivo app.config contiene
<system.net>
<mailSettings>
<smtp configSource="config\smtp.config" />
</mailSettings>
</system.net>
Este archivo está en control de código fuente. Sin embargo, los archivos individuales, como este, no son:
<?xml version="1.0" encoding="utf-8" ?>
<smtp deliveryMethod="Network">
<network host="127.0.0.1" port="25" defaultCredentials="false" password="" userName ="" />
</smtp>
Sin embargo, ahí no es exactamente donde termina la historia. ¿Qué pasa con los nuevos desarrolladores o una instalación de fuente nueva? La mayor parte de la configuración ya no está en el control de código fuente, y es complicado crear manualmente todos los archivos .config que necesitan. Prefiero tener una fuente que al menos se compile de inmediato.
Por lo tanto, mantenemos una versión de los archivos .config en el control de código fuente, denominada archivos .config.default . Por lo tanto, un árbol de origen fresco se ve así:
Aún así, no es realmente útil para el desarrollador, ya que para Visual Studio son solo archivos de texto sin sentido. Por lo tanto, el archivo copy_default_config.bat
por lotes`` se encarga de crear un conjunto inicial de archivos .config a partir de los archivos .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.
El script se puede volver a ejecutar de forma segura, ya que los desarrolladores que ya tienen sus archivos .config no los sobrescribirán. Por lo tanto, uno podría posiblemente ejecutar este archivo por lotes como un evento previo a la compilación. Los valores de los archivos .default pueden no ser exactamente correctos para una nueva instalación, pero son un punto de partida razonable.
En última instancia, cada desarrollador termina con una carpeta de archivos de configuración que se parece a esto:
Puede parecer un poco complicado, pero definitivamente es preferible a la molestia de que los desarrolladores se pidan unos a otros.