¿Qué es App.config en C # .NET? ¿Cómo usarlo?

179

He realizado un proyecto en C # .NET donde mi archivo de base de datos es un libro de Excel. Dado que la ubicación de la cadena de conexión está codificada en mi codificación, no hay ningún problema para instalarla en mi sistema, pero para otros sistemas sí.

¿Hay alguna manera de solicitar al usuario que establezca una ruta una vez que se completa la configuración de la aplicación?

Las respuestas que obtuve fueron "Usar App.Config" ... ¿Alguien puede decir qué es esta App.config y cómo usarla en mi contexto aquí?

shyam
fuente
44
posible duplicado de ¿Para qué sirve app.config?
usuario

Respuestas:

190

En su forma más simple, app.config es un archivo XML con muchas secciones de configuración predefinidas disponibles y soporte para secciones de configuración personalizadas. Una "sección de configuración" es un fragmento de XML con un esquema destinado a almacenar algún tipo de información.

Los ajustes se pueden configurar mediante secciones de configuración integradas como connectionStringso appSettings. Puede agregar sus propias secciones de configuración personalizadas; Este es un tema avanzado, pero muy poderoso para construir archivos de configuración fuertemente tipados.

Las aplicaciones web suelen tener un archivo web.config, mientras que las aplicaciones GUI / servicio de Windows tienen un archivo app.config.

Los archivos de configuración de nivel de aplicación heredan la configuración de los archivos de configuración global, por ejemplo, machine.config.

Lectura desde la aplicación.

Las cadenas de conexión tienen un esquema predefinido que puede usar. Tenga en cuenta que este pequeño fragmento es en realidad un archivo válido app.config (o web.config):

<?xml version="1.0"?>
<configuration>
    <connectionStrings>   
        <add name="MyKey" 
             connectionString="Data Source=localhost;Initial Catalog=ABC;"
             providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>

Una vez que haya definido su app.config, puede leerlo en código utilizando la clase ConfigurationManager . No se deje intimidar por los ejemplos detallados de MSDN; En realidad es bastante simple.

string connectionString = ConfigurationManager.ConnectionStrings["MyKey"].ConnectionString;

Escribir en la aplicación.

Cambiar los archivos * .config con frecuencia no suele ser una buena idea, pero parece que solo desea realizar una configuración única.

Consulte: Cambiar la cadena de conexión y volver a cargar app.config en tiempo de ejecución que describe cómo actualizar la connectionStringssección del archivo * .config en tiempo de ejecución.

Tenga en cuenta que lo ideal sería realizar tales cambios de configuración desde un simple instalador.

Ubicación de la aplicación. Configuración en tiempo de ejecución

P : Supongamos que cambio algo manualmente <value>en app.config, lo guardo y luego lo cierro. Ahora, cuando voy a mi carpeta bin y ejecuto el archivo .exe desde aquí, ¿por qué no refleja los cambios aplicados?

R : Cuando compila una aplicación, su app.config se copia en el directorio bin 1 con un nombre que coincide con su exe. Por ejemplo, si su exe se llamaba "test.exe", debería haber un "text.exe.config" en su directorio bin. Puede cambiar la configuración sin una recompilación, pero deberá editar el archivo de configuración que se creó en el momento de la compilación, no el archivo app.config original.

1: Tenga en cuenta que los archivos web.config no se mueven, sino que permanecen en la misma ubicación en el momento de la compilación y la implementación. Una excepción a esto es cuando se transforma un web.config .

.NET Core

Se introdujeron nuevas opciones de configuración con .NET Core. La forma en que funcionan los archivos * .config no parece haber cambiado, pero los desarrolladores son libres de elegir paradigmas de configuración nuevos y más flexibles.

Tim Medora
fuente
Consulte también: codeproject.com/Articles/16466/… para obtener una descripción general de cómo funcionan los archivos de configuración
BKSpurgeon
56

Simplemente, App.config es un XMLformato de archivo basado que contiene las configuraciones de nivel de aplicación .

Ejemplo:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="key" value="test" />
  </appSettings>
</configuration>

Puede acceder a las configuraciones utilizando ConfigurationManagercomo se muestra en el fragmento de código a continuación:

var value = System.Configuration.ConfigurationManager.AppSettings["key"];
// value is now "test"

Nota: ConfigurationSettings es un método obsoleto para recuperar información de configuración.

var value = System.Configuration.ConfigurationSettings.AppSettings["key"];
Furqan Safdar
fuente
21
Debe hacer referencia System.Configuration.dllpara utilizar las API mencionadas anteriormente.
KFL
2
Por un lado, no debe almacenar cadenas de conexión en la sección AppSettings, van en la sección ConnectionStrings. Para dos, Visual Studio generará propiedades tipadas fuertes para su configuración si las crea correctamente a través del diseñador, nunca debería tener que escribir un nombre de clave manualmente (como en el código anterior).
BrainSlugs83
1
No estamos hablando de las mejores prácticas aquí, sino de la solución al problema de OP.
Furqan Safdar
2
System.Configuration.ConfigurationManager.AppSettings["Key"]ya es una cadena, invocarla ToString()es redundante.
Bogdan Stăncescu
4

Solo para agregar algo que me faltaba en todas las respuestas, incluso si parece ser tonto y obvio tan pronto como sepas:

El archivo debe llamarse "App.config" o "app.config" y puede ubicarse en su proyecto al mismo nivel que, por ejemplo, Program.cs.

No sé si son posibles otras ubicaciones, otros nombres (como application.conf, como se sugiere en la documentación de ODP.net) no funcionaron para mí.

PD. Comencé con Visual Studio Code y creé un nuevo proyecto con "dotnet new". No se crea ningún archivo de configuración en este caso, estoy seguro de que hay otros casos. PPS Es posible que necesite agregar un paquete nuget para poder leer el archivo de configuración, en el caso de .NET CORE sería "dotnet add package System.Configuration.ConfigurationManager --version 4.5.0"

Dantel35
fuente
Esto es lo que estaba buscando. Necesitaba saber en qué nivel incluirlo. Algunos programas / marcos se ven en carpetas como/resources
alex
3

App.Config es un archivo XML que se utiliza como archivo de configuración para su aplicación. En otras palabras, almacena dentro de él cualquier configuración que desee cambiar sin tener que cambiar el código (y volver a compilar). A menudo se usa para almacenar cadenas de conexión.

Vea este artículo de MSDN sobre cómo hacerlo.

Se cayó el sistema
fuente
1

Puede acceder a las teclas en la aplicación.Config usando:

ConfigurationSettings.AppSettings["KeyName"]

Echa un vistazo a este hilo

Mármol Nublado
fuente
16
ahora se considera obsoleto
mikus
0

Solo agrego un punto más

Usando app.config de alguna manera para controlar el acceso a la aplicación, desea aplicar un cambio particular a todo el archivo de configuración de la aplicación de uso de la aplicación y puede acceder a la configuración como a continuación ConfigurationSettings.AppSettings ["Key"]

Gummadidala Shiva
fuente