2009-02-26 14 views
25

La forma en que actualmente me encargo de esto es por tener múltiples archivos de configuración, tales como:¿Cómo se manejan múltiples archivos web.config para múltiples entornos?

web.config 
web.Prod.config 
web.QA.config 
web.Dev.config 

Cuando el proyecto se implementa en los diferentes ambientes que acabo de cambiar el nombre del archivo correspondiente con la configuración correcta.

¿Alguien tiene sugerencias sobre cómo manejar esto mejor?

EDIT: Estas son algunas de las cosas que cambian en cada config:

de punto final URLs y seguridad
  • personalizados configs base de datos
  • cadenas de conexión
  • Sesión
  • configuración de log4net
    • WCF Client
  • +0

    Esa es la manera de hacerlo, excepto que web.config y sitios dev.config son la misma cosa. – tvanfosson

    Respuesta

    17

    de Scott Gu tenía un article en esta vez. La solución que presentó fue utilizar un evento de Preconstrucción para copiar la configuración correcta en su lugar dependiendo de la configuración de compilación elegida.

    También noté que ya hay un question similar aquí en SO.

    0

    Realmente depende de cuál es la diferencia entre el entorno s que hace que uses diferentes archivos web.config. ¿Puede dar más información sobre por qué cada entorno necesita actualmente uno diferente?

    +0

    Me imagino que cada entorno necesitaría conexiones de bases de datos especializadas, configuración del servicio de estado y otros elementos configurables que dependen en gran medida del entorno en el que se encuentre. –

    0

    La forma en que hemos estado haciendo es para anular la sección AppSettings:

    <appSettings file="../AppSettingsOverride.config"> 
        <add key="key" value="override" />  
        ... 
    </appSettings> 
    

    Esto sólo funciona para la sección de appSettings y por lo tanto es útil solamente hasta cierto punto. Estaría muy interesado en soluciones más robustas.

    Editar

    Acabo de ver esto: http://channel9.msdn.com/shows/10-4/10-4-Episode-10-Making-Web-Deployment-Easier/

    VS2010 tiene las transformadas de configuración que se parecen bastante impresionante, deben hacer múltiples configuraciones de una brisa completa.

    +0

    Esto es interesante: ¿administra cada uno de sus archivos AppSettingsOverride.config en control de fuente también? ¿Cuál es la diferencia entre usar tu método y usar archivos web.config separados? –

    +0

    Las mayores ventajas son que cada desarrollador puede tener su propia configuración de anulación. Lo que hay en la web.config en el control de la fuente es lo que queremos en el entorno de implementación principal y tenemos reemplazos en nuestros servidores de prueba y desarrollo. Probablemente combinaría esto con lo que ya se ha dicho para obtener el mejor efecto. –

    1

    En Visual Studio, creo xcopy build events y guardo todos los archivos de configuración en una carpeta/config. Solo necesita un evento para todas las configuraciones si nombra sus archivos después de la configuración de compilación: es decir, sobrescribe web.config con /config/web.$(Configuration).config

    0

    Tenemos algunas soluciones (no todas son hecho con web.config pero con la misma idea)

    1. Incluimos varios archivos de configuración en la implementación empaquetada. Durante la instalación, especificamos el entorno en el que estamos instalando.
    2. Migre todas las configuraciones específicas del entorno al servidor de la base de datos para ese entorno. WebServer proporciona su entorno al solicitar el nombre del servidor
    3. Proporcione varias configuraciones (1 por entorno) y utilice diferentes configuraciones de solicitud de código.
    4. Combinación de 2 y 3 (anular una parte de los ajustes basados ​​en el medio ambiente - por ejemplo el nombre del servidor de aplicaciones)
    0

    A través de la mayoría de los diferentes software de gestión de versiones (subversión, git, etc.) puede ignorar archivos específicos.

    Así, en la subversión, tendría que:

    configure.template.php - Este archivo se versiona y contiene los datos de configuración con plantilla, como configure.php de DSN vacío - Este archivo se ignora, de manera que los cambios no son rastreados

    En la subversión, la manera de hacer esto es:

    SVN pe svn: ignore. Abrirá su editor, luego escriba configure.php

    Guardar, salir, registrar sus cambios, y listo.

    1

    Mi forma favorita de abordar esto es con el atributo configSource. Es cierto que solo uso esto en un elemento (<connectionStrings>) pero proporciona una manera fácil de intercambiar y separar diferentes segmentos de un web.config (lo cual hago durante el tiempo de instalación a través de un proyecto de WebSetup).

    1

    también utilizo el web.DEV.config, web.TEST.config, etc. web.PROD.config

    encuentro de esta manera la forma más fácil, más simple y directo si sus proyectos no son complejo. No me gusta hacer las cosas más complicadas de lo necesario.

    Sin embargo, he usado NAnt y creo que funciona bien para esto. Puede configurar compilaciones para sus diferentes entornos. NAnt toma algo de lectura para aprender a usarlo, pero es bastante flexible.

    http://aspnet.4guysfromrolla.com/articles/120104-1.aspx

    http://nant.sourceforge.net/

    que lo utilizaron, junto con CruiseControl.net y NUnit para llevar a cabo todos los días automática construye con la validación de pruebas unitarias y pensaron que trabajaron bien juntos.

    Cuestiones relacionadas