Che cos'è App.config in C # .NET? Come usarlo?


179

Ho realizzato un progetto in C # .NET in cui il mio file di database è una cartella di lavoro di Excel. Poiché la posizione della stringa di connessione è codificata nel mio codice, non c'è alcun problema per installarla nel mio sistema, ma per altri sistemi non esiste.

Esiste un modo per richiedere all'utente di impostare un percorso una volta completata l'installazione dell'applicazione?

Le risposte che ho ricevuto sono state "Usa App.Config" ... qualcuno può dire cos'è questo App.config e come usarlo nel mio contesto qui?


4
possibile duplicato di A cosa serve app.config?
utente

Risposte:


190

Nella sua forma più semplice, app.config è un file XML con molte sezioni di configurazione predefinite disponibili e supporto per sezioni di configurazione personalizzate. Una "sezione di configurazione" è uno snippet di XML con uno schema destinato a memorizzare alcuni tipi di informazioni.

Le impostazioni possono essere configurate utilizzando sezioni di configurazione integrate come connectionStringso appSettings. Puoi aggiungere le tue sezioni di configurazione personalizzate; questo è un argomento avanzato, ma molto potente per la creazione di file di configurazione fortemente tipizzati.

Le applicazioni Web in genere hanno un web.config, mentre le applicazioni della GUI / di servizio di Windows hanno un file app.config.

I file di configurazione a livello di applicazione ereditano le impostazioni dai file di configurazione globali, ad esempio machine.config.

Lettura da App.Config

Le stringhe di connessione hanno uno schema predefinito che è possibile utilizzare. Tieni presente che questo piccolo frammento è in realtà un file app.config (o web.config) valido:

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

Dopo aver definito app.config, è possibile leggerlo in codice usando la classe ConfigurationManager . Non lasciarti intimidire dagli esempi dettagliati di MSDN; è in realtà abbastanza semplice.

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

Scrivere su App.Config

La modifica frequente dei file * .config di solito non è una buona idea, ma sembra che tu voglia eseguire solo una volta l'installazione.

Vedi: Cambia stringa di connessione e ricarica app.config in fase di esecuzione che descrive come aggiornare la connectionStringssezione del file * .config in fase di esecuzione.

Si noti che idealmente si dovrebbero eseguire tali modifiche alla configurazione da un semplice programma di installazione.

Posizione di App.Config in fase di esecuzione

D : Supponiamo di modificarne alcune manualmente <value>in app.config, salvarlo e chiuderlo. Ora quando vado nella mia cartella bin e lancio il file .exe da qui, perché non riflette le modifiche applicate?

A : Quando compili un'applicazione, il suo app.config viene copiato nella directory bin 1 con un nome che corrisponde al tuo exe. Ad esempio, se il tuo exe è stato chiamato "test.exe", ci dovrebbe essere un "text.exe.config" nella directory bin. È possibile modificare la configurazione senza ricompilare, ma sarà necessario modificare il file di configurazione creato al momento della compilazione, non l'app.config originale.

1: Notare che i file web.config non vengono spostati, ma rimangono nella stessa posizione al momento della compilazione e della distribuzione. Un'eccezione a ciò è quando viene trasformato un web.config .

.NET Core

Nuove opzioni di configurazione sono state introdotte con .NET Core. Il modo in cui funzionano i file * .config non sembra essere cambiato, ma gli sviluppatori sono liberi di scegliere nuovi paradigmi di configurazione più flessibili.


Vedi anche: codeproject.com/Articles/16466/… per una fantastica panoramica di come funzionano i file di configurazione
BKSpurgeon,

56

Semplicemente, App.config è unXMLformato di file basato che contiene le configurazioni a livello di applicazione .

Esempio:

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

È possibile accedere alle configurazioni utilizzando ConfigurationManager come mostrato nello snippet di codice seguente:

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

Nota: ConfigurationSettings è un metodo obsoleto per recuperare le informazioni di configurazione.

var value = System.Configuration.ConfigurationSettings.AppSettings["key"];

21
È necessario fare riferimento System.Configuration.dllper utilizzare le API sopra menzionate.
KFL,

2
Per uno, non dovresti archiviare le stringhe di connessione nella sezione AppSettings, vanno nella sezione ConnectionStrings. Per due, Visual Studio genererà forti proprietà tipizzate per le tue impostazioni se le crei correttamente attraverso il designer, non dovresti mai dover digitare manualmente un nome chiave (come se fossi nel codice sopra).
BrainSlugs83,

1
Non stiamo parlando delle migliori pratiche qui, ma piuttosto della soluzione al problema OP.
Furqan Safdar,

2
System.Configuration.ConfigurationManager.AppSettings["Key"]è già una stringa, chiamarla ToString()è ridondante.
Bogdan Stăncescu,

4

Solo per aggiungere qualcosa che mi mancava da tutte le risposte - anche se sembra essere sciocco e ovvio non appena sai:

Il file deve essere denominato "App.config" o "app.config" e può trovarsi nel progetto allo stesso livello, ad esempio Program.cs.

Non so se sono possibili altre posizioni, altri nomi (come application.conf, come suggerito nella documentazione di ODP.net) non hanno funzionato per me.

PS. Ho iniziato con Visual Studio Code e ho creato un nuovo progetto con "dotnet new". In questo caso non viene creato alcun file di configurazione, sono sicuro che ci sono altri casi. PPS. Potrebbe essere necessario aggiungere un pacchetto nuget per poter leggere il file di configurazione, nel caso di .NET CORE sarebbe "dotnet aggiungere pacchetto System.Configuration.ConfigurationManager --version 4.5.0"


questo è quello che stavo cercando. Avevo bisogno di sapere a quale livello includerlo. Alcuni programmi / framework appaiono in cartelle come/resources
alex

3

App.Config è un file XML utilizzato come file di configurazione per l'applicazione. In altre parole, memorizzi al suo interno qualsiasi impostazione che potresti voler modificare senza dover cambiare codice (e ricompilare). Viene spesso utilizzato per memorizzare stringhe di connessione.

Vedi questo articolo MSDN su come farlo.



0

Aggiungo solo un altro punto

Usando app.config come puoi controllare l'accesso all'applicazione, vuoi applicare particolari modifiche all'intera applicazione usa il file di configurazione dell'app e puoi accedere alle impostazioni come sotto ConfigurationSettings.AppSettings ["Chiave"]

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.