2009-05-26 14 views
67

Sono effettivamente in fase di apprendimento di materiale correlato .NET e stavo esplorando come salvare l'applicazione. Ho finito per scrivere la mia classe che salva le impostazioni in un file XML e poi ho scoperto che .NET stesso supporta il salvataggio delle impostazioni dell'applicazione.Qual è la differenza tra il file app.config e il file XYZ.settings?

Ma ho trovato 2 modi per farlo. Quando apro la finestra di dialogo aggiungi nuovo elemento in Visual Studio 2008, offre l'opzione per creare il file delle impostazioni (.settings) o un file di configurazione (.config). Qual è la differenza tra entrambi e in quale scenario dovrebbero essere utilizzati?

risposta

51

Le impostazioni (sia da un set .settings che da Configuration.AppSettings), sono memorizzate nel file .config [insieme a molte altre cose].

La differenza è che la roba .settings [che è stato aggiunto in .NET 2.0/VS2005] strati una classe fortemente tipizzato in cima a una serie di impostazioni che appartengono insieme mentre Configuration.AppSettings consente solo di recuperare le stringhe, ti costringe a fare qualsiasi conversione e non ha la nozione di default. (la classe Configuration è stata effettivamente deviata in un assembly laterale per riflettere questo: è necessario aggiungere un riferimento a System.Configuration in modo esplicito se lo si desidera).

Aggiungendo un .settings al progetto, verrà aggiunto un app.config per ospitare le impostazioni, se non ne hai già uno. La classe che legge le impostazioni viene generata automaticamente ogni volta che si modifica l'elenco delle impostazioni per il componente/l'applicazione.

Altre funzioni di .Settings è la possibilità di designare alcune impostazioni come specifiche dell'utente (e anche per salvare le impostazioni specifiche dell'utente con una singola chiamata).

La migliore ragione di tutti da utilizzare. Impostazioni è generalmente quella che si ottiene la possibilità di identificare chiaramente chi sta usando quale impostazione in un codice base seguendo gli usi delle proprietà (e ogni insieme è un blocco separato nel file XML) . Configuration.appSettings è più globale nella sua natura - è solo un sacco di proprietà e non sai quale DLL, sottosistema o classe dipende da una particolare voce di impostazione. Vedi this blog post from Steven Smith per molto altro.

Infine, se non hai ancora letto abbastanza sulla gestione delle impostazioni, non hai intenzione di battere this Rick Strahl post on the subject per completezza o pura quantità di idee e angoli.

ASIDE: C'è anche il materiale ASP.NET vNext Configuration, outlined in this article che è abbastanza flessibile e offre un'angolazione diversa sulla gestione delle impostazioni di configurazione.

+0

Grazie per la risposta. Solo confuso su un punto: ci sono 2 tipi di impostazioni.Uno è l'impostazione delle app e l'altro è l'impostazione dell'utente. Se entrambi i tipi di impostazioni sono memorizzati nel file di configurazione, in che modo le impostazioni utente saranno diverse per i diversi utenti? – Hemant

+2

Ci scusiamo per aver omesso di menzionarlo. Le impostazioni utente sono uno dei motivi per cui esistono i valori predefiniti (se l'utente non ha ancora utilizzato l'app, i valori predefiniti si applicano fino a quando non viene salvata una modifica). Le impostazioni dell'utente sono memorizzate in un file di configurazione separato nella directory del profilo dell'utente (utenti \ XXX). Anche le impostazioni dell'utente possono essere aggiornate (quelle di sistema non possono usare l'API predefinita e non dovrebbero - vivono in Program Files e non è possibile controllare in modo sicuro l'accesso di più utenti lì.) –

+0

dove si inserisce il gestore di configurazione in tutto questo? Sto provando e fallendo nel tentativo di dirmi dove sono le mie settings.settings e poi salvare una configurazione vuota lì –

3

Un file di impostazioni è un file di risorse in cui vengono specificate le diverse impostazioni e il loro valore predefinito.

I valori stessi sono configurati nel file di configurazione dell'applicazione (file .config).

Un file di impostazioni non viene mai distribuito, quindi è necessario il file di configurazione per eseguire la configurazione.

+0

Mentre sono in modalità schizzinosa (appena aggiornato il mio post - ci sono un sacco di file mancanti) Mentre un file .settings è un file XML, sono ragionevolmente sicuro che non si tratti di una Risorsa, vero? Inoltre, i valori specifici dell'utente vengono memorizzati in un'area separata, al di fuori del file .config. Il file .config deve essere distribuito se si dispone di impostazioni non predefinite (gli attributi all'interno della classe di impostazioni generate gestiscono il valore predefinito dei valori se non viene specificato nulla nel file di configurazione.) –

+0

Mentre il file xml Settings.settings isn ' t distribuito, il file Settings.Designer.cs viene compilato nell'applicazione, non è vero? –

0

Il file app.config è archiviato nella stessa directory dell'app. Gli utenti normali non avranno permessi di scrittura (ad esempio in "Programmi").

Il file delle impostazioni deve essere memorizzato nella directory "AppData" degli utenti (dove ha permessi r/w).

Quindi utilizzare il file delle impostazioni per le opzioni configurabili dall'utente.

+0

Non proprio, secondo altre risposte: https://stackoverflow.com/a/909712/199364, https://stackoverflow.com/a/13072966/199364 '.settings' (e il supporto di 'Impostazioni' di Visual Studio) può essere utilizzato sia per la configurazione dell'applicazione una tantum che per la configurazione per utente. '.settings' non esiste in fase di esecuzione; ciò che esiste al momento dell'esecuzione è 'app.config' nella cartella dell'app, e [utente]' .config' nella cartella dei dati dell'utente. – ToolmakerSteve

Problemi correlati