2008-09-30 13 views
8

Tengo un sistema .Net relativamente grande que consiste en una serie de aplicaciones diferentes. En lugar de tener muchos archivos de app.config diferentes, me gustaría compartir un solo archivo de configuración entre todas las aplicaciones.¿Cómo puedo compartir la configuración de la aplicación en una aplicación .net?

También me gustaría tener una versión cuando desarrollé en mi máquina, una versión para alguien más desarrollando en su máquina, una versión para un sistema de prueba y una versión para un sistema en vivo.

¿Hay una manera fácil de hacer esto?

+0

Tuve la misma pregunta, pero nunca llegué a encontrar una solución. Seguiré este hilo. –

Respuesta

6

Para grandes cantidades de configuración que necesitan múltiples aplicaciones, pondría esta configuración en un repositorio central, p. una base de datos, archivo en una ubicación común.

utilizar diferentes versiones de un archivo de configuración para diferentes entornos, crear una configuración de construcción para cada uno de los diferentes ambientes y un archivo de configuración llamado así por el medio ambiente, por ejemplo:

production.app.config producción de prueba prueba .app.config

Puede utilizar un evento de precompilación para copiar la configuración correcta sobre el app.config predeterminado en su proyecto. Esto luego se copiará a su directorio de salida de forma normal.

El evento de preconstrucción se vería similar al anterior, simplemente use $ (Configuración) para obtener el archivo apropiado para el entorno que desea.

Puede combinar esto con lo anterior para copiar los archivos de configuración específicos de compilación en general en cada proyecto.

+2

Un repositorio central aún necesita alguna información de configuración local (por ejemplo, ConnectionString o lo que sea necesario para acceder a ella). Además, es necesario dividir cierta información entre el local y el repositorio (por ejemplo, el registro para poder informar errores "tempranos"). Todavía es factible, por supuesto, pero requiere algunos pensamientos adicionales. –

+0

Supongo que la configuración de compilación debería realizarse en Visual Studio: he encontrado que está bien, pero necesita bastante administración, ya que es muy fácil cambiar accidentalmente la configuración de compilación. ¡Buena respuesta! –

+0

Nick R: solo lo he hecho en Visual Studio, pero no veo por qué MSBuild no pudo hacerlo también. – marcj

2

Se puede usar un evento posterior a la generación (Propiedades -> Eventos de generación) en sus proyectos "niños" para copiar un archivo de configuración de un proyecto principal a los demás, así:

copy /Y c:\path\to\master\project\app.config $(TargetPath).config 
exit 0 

(El " salga 0 "ya que la última línea evita un error de compilación).

Tener archivos de configuración distintos para los diferentes tipos de generación ("RELEASE", "Test", etc), puede editar el archivo .csproj (o .vbproj) en NOTEPAD.EXE para agregar una etiqueta AppConfig para cada una de las grupos destinatarios, así:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    <DebugSymbols>true</DebugSymbols> 
    <DebugType>full</DebugType> 
    <Optimize>false</Optimize> 
    <OutputPath>.\bin\Debug\</OutputPath> 
    <DefineConstants>DEBUG;TRACE</DefineConstants> 
    <AppConfig>debug.app.config</AppConfig> 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <DebugSymbols>true</DebugSymbols> 
    <DebugType>full</DebugType> 
    <Optimize>false</Optimize> 
    <OutputPath>.\bin\Devel\</OutputPath> 
    <DefineConstants>TRACE</DefineConstants> 
    <AppConfig>release.app.config</AppConfig> 
    </PropertyGroup> 

Aviso los nuevos < appconfig> etiquetas presentes en cada grupo.

2

En lugar de añadir elementos <add> a su sección <appSettings> de su archivo de configuración, se puede añadir un atributo al elemento file=<appSettings> a decirle que cargue los datos de un archivo diferente. Luego puede mantener su configuración común en ese archivo común.

Consulte appSettings Element (General Settings Schema) en MSDN Library.

+0

Lo hago. Solo me decepciona que el archivo Settings.settings (lo prefiera ya que mecanografía la configuración y permite una fácil actualización de la configuración) no ofrece esta característica. –

0

También puede poner los ajustes de configuración en machine.config para compartirlos entre varias aplicaciones. Esto hace que el despliegue sea más problemático.

1

Es posible usar NTFS symbolic links para compartir un archivo .config .NET. He visto esto utilizado con éxito en una solución que comprende una aplicación ASP.NET, aplicaciones de consola y más.

+0

Me gusta esto, pero agrega otro paso de implementación. – ProfK

Cuestiones relacionadas