Il modo più semplice per avere un file di configurazione in un'applicazione Windows Forms C #


88

Sono davvero nuovo di .NET e non ho ancora capito come funzionano i file di configurazione.

Ogni volta che cerco su Google su di esso ottengo risultati su web.config, ma sto scrivendo un'applicazione Windows Forms.

Ho capito che devo usare lo spazio dei nomi System.Configuration, ma la documentazione non aiuta.

Come definisco che il mio file di configurazione è XYZ.xml? O ha un nome "predefinito" per il file di configurazione? Continuo a non capire.

Inoltre, come definisco una nuova sezione? Ho davvero bisogno di creare una classe che eredita da ConfigurationSection?

Vorrei solo un file di configurazione con alcuni valori come questo:

<MyCustomValue>1</MyCustomValue>
<MyCustomPath>C:\Some\Path\Here</MyCustomPath>

C'è un modo semplice per farlo? Puoi spiegare in modo semplice come leggere e scrivere da / verso un semplice file di configurazione?


1
Qual è la tua versione di .NET? Per 2.0 e versioni successive, c'è un modo molto carino chiamato Impostazioni.
Thomas,

1
@Seven era un errore di battitura ma potrebbe significare "Spiega con un esempio" :)
Fabio Gomes

Risposte:


121

Vuoi usare un'app.Config.

Quando aggiungi un nuovo elemento a un progetto, c'è qualcosa chiamato file di configurazione delle applicazioni. Aggiungilo.

Quindi aggiungi le chiavi nella sezione configurazione / impostazioni app

Piace:

<configuration>
 <appSettings>
  <add key="MyKey" value="false"/>

Accedi ai membri facendo

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

Funziona in .NET 2 e versioni successive.


2
Attualmente funziona in tutte le versioni di .NET, dalla v1.0 in poi. La nuova classe in .NET 2.0 è ConfigurationManager.
Mike Dimmick,

4
Io personalmente uso la scheda "Impostazioni" nelle "Proprietà applicazione" (solo Framework 2.0 in poi) perché Visual Studio codificherà proprietà fortemente tipizzate per le tue impostazioni. Possono anche includere impostazioni "Utente" che sono di lettura / scrittura in fase di esecuzione.
Adrian Clark,

@ Mike sì, avevo la sensazione che fosse così, ma non ne ero troppo sicuro. Non ho lavorato molto con 1.
qui

26
Nota che ConfigurationSettingsè obsoleto, usa System.Configuration.ConfigurationManager.AppSettings["MyKey"];.
JNF

16
Inoltre una nota, per utilizzare il System.Configuration.ConfigurationManagertuo progetto è necessario un riferimento aSystem.Configuration.dll
dmeglio

66

Chiarimento delle risposte precedenti ...

  1. Aggiungi un nuovo file al tuo progetto ( AggiungiNuovo elementoFile di configurazione dell'applicazione )

  2. Il nuovo file di configurazione verrà visualizzato in Esplora soluzioni come App.Config .

  3. Aggiungi le tue impostazioni in questo file utilizzando quanto segue come modello

    <configuration>
      <appSettings>
        <add key="setting1" value="key"/>
      </appSettings>
      <connectionStrings>
        <add name="prod" connectionString="YourConnectionString"/>
      </connectionStrings>
    </configuration>
  4. Recuperali in questo modo:

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }
  5. Quando viene creata, la cartella di output conterrà un file denominato <assemblyname> .exe.config. Questa sarà una copia del file App.Config . Non è necessario che lo sviluppatore esegua ulteriori lavori per creare questo file.


1
Questo mi è stato utile. Altri due punti: quando si aggiunge il nuovo file al progetto, il file di configurazione dell'applicazione è stato trovato quando ho fatto clic sul nodo Generale sul lato sinistro della finestra di dialogo. Per poter utilizzare la classe ConfigurationManager nel mio codice, ho dovuto aggiungere la DLL System.Configuration ai miei riferimenti.
John Gilmer

28

Da una rapida lettura delle risposte precedenti, sembrano corrette, ma non sembra che nessuno abbia menzionato le nuove funzionalità di configurazione in Visual Studio 2008. Utilizza ancora app.config (copiato in fase di compilazione in YourAppName.exe.config), ma c'è un widget dell'interfaccia utente per impostare le proprietà e specificarne i tipi. Fare doppio clic su Settings.settings nella cartella "Proprietà" del progetto.

La parte migliore è che l'accesso a questa proprietà dal codice è sicuro: il compilatore rileverà errori evidenti come l'errata digitazione del nome della proprietà. Ad esempio, si accederà a una proprietà chiamata MyConnectionString in app.config in questo modo:

string s = Properties.Settings.Default.MyConnectionString;

Questo era disponibile in VS2005.
Greg D,

5
Bello, ma (Proprietà progetto | Impostazioni) genera codice che deve essere compilato. Se desideri modificare un'impostazione, devi rilasciare nuovi file binari al cliente.
John L4

@ JohnL4 se queste impostazioni sono nell'ambito "utente", puoi modificarle a livello di programmazione, ad esSettings.Default.Test = "abc"; Settings.Default.Save();
Peet Brits,

10

Dovresti creare un file App.config (molto simile a web.config ).

Fare clic con il pulsante destro del mouse sul progetto, aggiungere un nuovo elemento e scegliere il nuovo "File di configurazione dell'applicazione" .

Assicurati di aggiungere usando System.Configuration nel tuo progetto.

Quindi puoi aggiungere valori ad esso:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="setting1" value="key"/>
  </appSettings>
  <connectionStrings>
    <add name="prod" connectionString="YourConnectionString"/>
  </connectionStrings>
</configuration>

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }

Solo una nota: secondo Microsoft , dovresti usare ConfigurationManager invece di ConfigurationSettings (vedi la sezione osservazioni):

"La classe ConfigurationSettings fornisce solo la compatibilità con le versioni precedenti. Per le nuove applicazioni è necessario utilizzare invece la classe ConfigurationManager o la classe WebConfigurationManager."


Molto utile. Risolto il mio problema al T.
JCMorris il

In Visual Studio 2015: fare clic su Progetto> Aggiungi riferimento. Scorri verso il basso a metà per trovare System.Configuration Fai clic su OK, quindi aggiorna la riga di codice come da commento di Nathan.
Robot70

7

Il nome predefinito per un file di configurazione è [yourexe] .exe.config. Quindi notepad.exe avrà un file di configurazione denominato notepad.exe.config, nella stessa cartella del programma. Questo è un file di configurazione generale per tutti gli aspetti di CLR e Framework, ma può contenere le tue impostazioni in un file<appSettings> nodo.

L' <appSettings>elemento crea una raccolta di coppie nome-valore a cui è possibile accedere come System.Configuration.ConfigurationSettings.AppSettings. Tuttavia, non è possibile salvare le modifiche nel file di configurazione.

È anche possibile aggiungere i propri elementi personalizzati a un file di configurazione, ad esempio per definire un'impostazione strutturata, creando una classe che implementa IConfigurationSectionHandlere aggiungendola <configSections>all'elemento del file di configurazione. È quindi possibile accedervi chiamando ConfigurationSettings.GetConfig.

.NET 2.0 aggiunge una nuova classe, System.Configuration.ConfigurationManagerche supporta più file, con sostituzioni per utente dei dati per sistema. Supporta anche il salvataggio delle configurazioni modificate nei file delle impostazioni.

Visual Studio crea un file chiamato App.config, che copia nella cartella EXE, con il nome corretto, quando viene creato il progetto.



3

In Windows Forms, hai il app.configfile, che è molto simile al web.configfile. Ma poiché quello che vedo che ti serve sono valori personalizzati, ti suggerisco di usare Impostazioni .

Per farlo, apri le proprietà del tuo progetto e poi vai alle impostazioni. Se un file delle impostazioni non esiste, avrai un collegamento per crearne uno. Quindi, puoi aggiungere le impostazioni alla tabella che vedi lì, che genererebbe sia l'XML appropriato, sia una classe Settings che può essere utilizzata per caricare e salvare le impostazioni.

La classe delle impostazioni avrà un nome simile a DefaultNamespace.Properties.Settings. Quindi, puoi utilizzare un codice simile a:

using DefaultNamespace.Properties;

namespace DefaultNamespace {
    class Class {
        public int LoadMySettingValue() {
            return Settings.Default.MySettingValue;
        }
        public void SaveMySettingValue(int value) {
            Settings.Default.MySettingValue = value;
        }
    }
}

2

Sono d'accordo con le altre risposte che ti indirizzano ad app.config. Tuttavia, invece di leggere i valori direttamente da app.config, dovresti creare una classe di utilità (AppSettings è il nome che uso) per leggerli ed esporli come proprietà. La classe AppSettings può essere utilizzata per aggregare le impostazioni di diversi archivi, come i valori da app.config e le informazioni sulla versione dell'applicazione dall'assembly (AssemblyVersion e AssemblyFileVersion).



1

Uso:

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

AppSettings è stato deprecato ed è ora considerato obsoleto ( collegamento ).

Inoltre, la sezione appSettings di app.config è stata sostituita da applicationSettings sezione .

Come menzionato da qualcun altro, dovresti usare System.Configuration.ConfigurationManager ( link ) che è una novità per .NET 2.0.


ConfigurationSettings è deprecato non AppSettings.
Toby

0

Quale versione di .NET e Visual Studio stai utilizzando?

Quando hai creato il nuovo progetto, dovresti avere un file nella tua soluzione chiamato app.config . Questo è il file di configurazione predefinito.

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.