¿Cómo puedo compartir la configuración de la aplicación en una aplicación .net?

StackOverflow https://stackoverflow.com/questions/155144

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo un sistema .Net relativamente grande que consta de varias aplicaciones diferentes. En lugar de tener muchos archivos app.config diferentes, me gustaría compartir un solo archivo de configuración entre todas las aplicaciones.

También me gustaría tener una versión cuando desarrolle en mi máquina, una versión para otra persona que desarrolle 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?

¿Fue útil?

Solución

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

Para usar diferentes versiones de un archivo de configuración para diferentes entornos, cree una configuración de compilación para cada uno de los diferentes entornos y un archivo de configuración con el nombre del entorno, por ejemplo:

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

A continuación, puede usar un evento previo a la compilación para copiar la configuración correcta sobre la aplicación predeterminada.config en su proyecto. Esto se copiará en su directorio de salida de forma normal.

El evento previo a la compilación se vería similar al anterior, simplemente use $ (Configuración) para obtener el archivo apropiado para el entorno que desee.

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

Otros consejos

Puede usar un evento Post-build (Propiedades - > Build Events) en su " child " proyectos para copiar un archivo de configuración de un proyecto maestro a otros, como este:

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

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

Para tener archivos de configuración separados para diferentes destinos de compilación (" RELEASE " ;, " DEBUG " ;, etc), puede editar el archivo .csproj (o. vbproj) en NOTEPAD.EXE para agregar una etiqueta AppConfig para cada uno de los grupos objetivo, de esta manera:

  <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>

Observe las nuevas etiquetas < AppConfig > presentes en cada grupo.

En lugar de agregar elementos <add> a su sección <appSettings> de su archivo de configuración, puede agregar un atributo file= al elemento <=> para indicarle que cargue esos datos desde un archivo diferente. Luego, podría mantener su configuración común en ese archivo común.

Consulte elemento de configuración de la aplicación (esquema de configuración general) en la biblioteca de MSDN .

Es posible utilizar enlaces simbólicos NTFS para compartir un archivo .NET .config. He visto que esto se utiliza con éxito en una solución que comprende una aplicación ASP.NET, aplicaciones de consola y más.

También puede poner los ajustes de configuración en machine.config para compartirlos entre múltiples aplicaciones. Sin embargo, esto hace que la implementación sea más problemática.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top