visual studio example app c# config

studio - solo app.config multi-proyecto c#



c# config file example (7)

Encontré el botón y abrí el archivo app.config como enlace, sin embargo, eso causó que cuando build creara nuevamente un archivo de configuración separado para cada proyecto, y por lo tanto, al desplegar el proyecto 3, tendré 3 archivos de configuración. Lo que quería hacer es mantener un único archivo para todos los proyectos en una determinada solución. ¿Puedo hacer eso?

Sí, puedes hacerlo, pero ¿ deberías hacerlo?

La suposición básica en una aplicación .NET es que una aplicación = un archivo de configuración. Fuera de la caja, y con un método sencillo, no puede compartir archivos de configuración entre aplicaciones.

Si crea sus propias secciones de configuración personalizadas, puede "externalizarlas" a archivos externos, que podrían compartirse. Imagine que crea su propia sección de configuración personalizada llamada "MyConfiguration", luego su app.config se vería así:

<configuration> <configSections> <section name="MyConfiguration" type="MyConfigurationSection, MyConfigurationAssembly" /> </configSections> <MyConfiguration> <nestedElement> <dateTimeValue>10/16/2006</dateTimeValue> <integerValue>1</integerValue> </nestedElement> </MyConfiguration> </configuration>

Puede tener su sección "Mi Configuración" en su propio archivo y hacer referencia a ella desde la configuración de su aplicación:

<configuration> <configSections> <section name="MyConfiguration" type="MyConfigurationSection, MyConfigurationAssembly" /> </configSections> <MyConfiguration configSource="MyConfiguration.config" /> </configuration>

y su "MyConfiguration.config" contendría:

<MyConfiguration> <nestedElement> <dateTimeValue>10/16/2006</dateTimeValue> <integerValue>1</integerValue> </nestedElement> </MyConfiguration>

Al hacer esto, podría "externalizar" y así compartir al menos la mayor parte de sus configuraciones, siempre que estén en sus propias secciones de configuración personalizadas.

Para obtener más información y una introducción excelente a los misterios de configuración de .NET 2.0 y superiores, consulte la serie de tres partes de Jon Rista sobre la configuración de .NET 2.0 en CodeProject.

Muy recomendado, bien escrito y extremadamente útil.

Bagazo

Quiero usar una sola aplicación.config por 3 proyectos diferentes.

¿Cómo acceder a las configuraciones?

ConfigurationManager.AppSettings["config1"]



Digamos que tienes esta estructura de carpetas:

  • Solución
    • Proyecto 1
    • Proyecto2
    • Proyecto3

Hacer esto:

  1. Cree el archivo App.config en la carpeta de nivel de Solución. No encontrará una opción para agregar un archivo App.config de las plantillas, así que simplemente cree un nuevo archivo de texto vacío con el nombre App.config y pegue el contenido de un archivo App.config normal.
  2. Para cada proyecto en Solution Explorer:

    1. Haga clic derecho y seleccione Add > Existing Item
    2. Ubica el archivo
    3. Seleccione Add as link en el cuadro desplegable al lado del botón Add .

Editado para agregar:

Indicas correctamente que el método anterior solo compartió el archivo hasta el tiempo de construcción. Para usar un archivo compartido en tiempo de ejecución, consulte las respuestas a esta pregunta .


El archivo de configuración común

<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="appSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </configSections> <appSettings> <add key="key1" value="value1"/> </appSettings> </configuration>

Para acceder al archivo de configuración asignado

ConfigurationFileMap fileMap = new ConfigurationFileMap(file); //Path to your config file Configuration configuration = ConfigurationManager.OpenMappedMachineConfiguration(fileMap); string value = configuration.AppSettings.Settings["key1"].Value;


Entiendo que esta es una vieja pregunta, pero hay una manera mucho más fácil de lograr esto. Si está utilizando Visual Studio 2008 o superior, hay un tipo de proyecto llamado "Proyecto compartido".

Un proyecto compartido puede tener prácticamente todo lo que otros tipos de proyectos puedan contener. Esto no es solo para C #, sino para todos los idiomas compatibles con VS2015. Cuando se incluye algo en el Proyecto compartido, está disponible para otros proyectos después de agregar una referencia (ver a continuación).

La principal diferencia con las Clases en un Proyecto Compartido VS una Biblioteca Compartida es que al compilar el programa todo lo que está en el Proyecto Compartido se compilará directamente en su proyecto, no como un archivo separado (.dll, .exe). Piense que todo lo que está en el proyecto compartido se inserta en los otros proyectos. Aquí hay un pequeño tutorial sobre cómo configurarlo y usarlo:

Visual Studio 2015 - Tutorial de proyecto compartido:

Cree el nuevo proyecto compartido seleccionando Archivo-> Nuevo-> Proyecto o haga clic con el botón derecho en la Solución en el Explorador de soluciones y seleccione Agregar-> Nuevo proyecto . Cuando aparezca el cuadro de diálogo, seleccione "Proyecto compartido", asígnele un nombre TestShared al proyecto en este ejemplo.

Después de agregar el Nuevo Proyecto, puede agregar todo lo que necesita para estar disponible para otros proyectos. En este caso, agregaremos la aplicación.config. Haga clic con el botón derecho en el Proyecto compartido y seleccione Agregar-> Nuevo elemento . Seleccione Visual C # -> Data-> XML File dándole el nombre obviamente a app.config.

Finalmente, agregue una referencia al Proyecto compartido haciendo clic con el botón derecho en el proyecto con el que necesita compartir el proyecto y seleccione Agregar-> Referencia. En el cuadro de diálogo del Administrador de referencia, seleccione su Proyecto compartido, que se enumerará en el elemento "Proyectos compartidos" a la izquierda.

Ahora todo lo que está en el Proyecto Compartido está disponible en el otro proyecto, no hay necesidad de usar importaciones ni nada de eso. Simplemente funciona. Este patrón es bastante útil cuando está desarrollando un programa y necesita tener varias GUI diferentes (Windows, iOS, Android, etc.). Por ejemplo, podría tener un proyecto compartido para la funcionalidad "Core" y luego tener un Proyecto de GUI por separado para cada uno de los diferentes Sistemas Operativos que desea apoyar en su programa.

Me doy cuenta de que esta es una pregunta más antigua, pero como esto apareció en Google, pensé que respondería a esto, así que cuando otros buscan lo mismo, saben de esta poderosa característica VS.


Una opción de diseño es evitar el acceso a la app.config directamente desde los proyectos de la biblioteca de su clase, evitando así la dependencia externa adicional.

Por el contrario, solo su proyecto ejecutable sabe sobre el archivo de configuración y puede pasar explícitamente la información de configuración apropiada a las bibliotecas cuando crea objetos a partir de ellos o los inicializa.


System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); config = ConfigurationManager.OpenExeConfiguration(Path.Combine(@"D:/", "config.exe")); foreach (string key in config.AppSettings.Settings.AllKeys) { string value = config.AppSettings.Settings[key].Value; ConfigurationManager.AppSettings.Set(key, value); }