Quando si utilizza un file Settings.settings in .NET, dove viene effettivamente memorizzata la configurazione?


100

Quando si utilizza un file Settings.settings in .NET, dove viene effettivamente memorizzata la configurazione? Voglio eliminare le impostazioni salvate per tornare allo stato predefinito, ma non riesco a trovare dove sono archiviate ... qualche idea?

Risposte:


100

Dipende dal fatto che l'impostazione scelta sia nell'ambito "Utente" o nell'ambito "Applicazione".

Ambito dell'utente

Le impostazioni dell'ambito utente vengono archiviate in

C: \ Documents and Settings \ nomeutente \ Impostazioni locali \ Dati applicazioni \ Nome applicazione

Puoi leggerli / scriverli in fase di esecuzione.

Per Vista e Windows 7, la cartella è

C: \ Users \ nomeutente \ AppData \ Local \ ApplicationName

o

C: \ Users \ nomeutente \ AppData \ Roaming \ ApplicationName

Ambito dell'applicazione

Le impostazioni dell'ambito dell'applicazione vengono salvate AppName.exe.confige sono di sola lettura in fase di esecuzione.


20
La cartella per le impostazioni dell'ambito utente su Vista e Win7 è C: \ Users \ nome utente \ AppData \ Local \ ApplicationName \ Publisher \ ApplicationName \ Version o C: \ Users \ nomeutente \ AppData \ Roaming \ ApplicationName \ Publisher \ ApplicationName \ Version a seconda di il valore della proprietà Roaming nel riquadro Impostazioni.
jakdep

4
a meno che non sia un addin, nel qual caso sarà AppName.dll.config
Tipo anonimo

4
Il mio user.config locale su Windows 7 è in C: \ Users \ <username> \ AppData \ Local \ Publisher \ ApplicationName_Eid_EvidenceHash \ Version
The Lonely Coder

53

Ecco lo snippet che puoi utilizzare per ottenere a livello di codice il percorso del file user.config:

public static string GetDefaultExeConfigPath(ConfigurationUserLevel userLevel)
{
  try
  {
    var UserConfig = ConfigurationManager.OpenExeConfiguration(userLevel);
    return UserConfig.FilePath;
  }
  catch (ConfigurationException e)
  {
    return e.Filename;
  }
}

ApplicationSettings (cioè settings.settings) usa PerUserRoamingAndLocal per le impostazioni utente per impostazione predefinita (come ricordavo).

Aggiornamento: strano ma ci sono troppe risposte errate qui. Se stai cercando il file delle impostazioni con ambito utente (user.config) si troverà nella seguente cartella (per Windows XP):

C: \ Documents and Settings \ (nome utente) \ Impostazioni locali \ Dati applicazioni \ (nome-azienda-se-esiste) \ (nome-app) .exe_ (Url | StrongName) _ (hash) \ (versione-app) \

Url o StrongName dipendono dal nome sicuro dell'assembly dell'applicazione o meno.


Qualche idea su cosa contribuisca all'hash in quel percorso? Ogni versione successiva della mia app riceve un valore hash diverso, il che rende inutile la chiamata a ApplicationSettingsBase.Upgrade (). : /
Mal Ross

2
L'hash è l'hash SHA1 di StrongName quando l'app è firmata o il percorso quando l'app non è firmata. Maggiori informazioni qui msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
arbiter

20

Supponendo che tu stia parlando di desktop e non di applicazioni web:

Quando si aggiungono impostazioni a un progetto, VS crea un file denominato app.confignella directory del progetto e memorizza le impostazioni in quel file. Crea anche il Settings.csfile che fornisce le funzioni di accesso statiche alle singole impostazioni.

In fase di compilazione, VS (per impostazione predefinita; puoi cambiarlo) copia il file app.confignella directory di compilazione, cambiando il suo nome in modo che corrisponda all'eseguibile (ad esempio, se il tuo eseguibile è denominato foo.exe, il file verrà denominato foo.exe.config), che è il nome di. NET Configuration Manager cerca quando recupera le impostazioni in fase di esecuzione.

Se modifichi un'impostazione tramite l'editor delle impostazioni VS, aggiornerà sia app.confige Settings.cs. (Se guardi le funzioni di accesso alle proprietà nel codice generato in Settings.cs, vedrai che sono contrassegnate con un attributo contenente il valore predefinito dell'impostazione che è nel tuo app.configfile.) Se cambi un'impostazione modificando app.configdirettamente il file, Settings.csnon verrà aggiornato, ma il nuovo valore verrà comunque utilizzato dal programma quando lo si esegue, perché app.configviene copiato in foo.exe.configal momento della compilazione. Se lo disattivi (impostando le proprietà del file), puoi cambiare un'impostazione modificando direttamente il foo.exe.configfile nella directory di build.

Poi ci sono le impostazioni con ambito utente.

Le impostazioni dell'ambito dell'applicazione sono di sola lettura. Il programma può modificare e salvare le impostazioni dell'ambito dell'utente, consentendo così a ciascun utente di avere le proprie impostazioni. Queste impostazioni non sono memorizzate nel foo.exe.configfile (poiché in Vista, almeno, i programmi non possono scrivere in nessuna sottodirectory Program Filessenza elevazione); vengono archiviati in un file di configurazione nella directory dei dati dell'applicazione dell'utente.

Il percorso di quel file è %appdata%\%publisher_name%\%program_name%\%version%\user.config, ad es C:\Users\My Name\AppData\Local\My_Company\My_Program.exe\1.0.0\user.config. Nota che se hai dato al tuo programma un nome sicuro, il nome sicuro verrà aggiunto al nome del programma in questo percorso.


1
Sembra che il componente My_Company del percorso sarà predefinito su Microsoft. Non ho ancora trovato un modo per cambiare questo che funziona davvero, se qualcuno sa che sarebbe bene aggiungere.

1
user565869, hai provato in Visual Studio, hai aperto la scheda dell'applicazione della proprietà del progetto, fai clic sul pulsante delle informazioni sull'assieme e dovresti essere in grado di cambiare Azienda?
ripetilo

15

Durante la navigazione per capire l'hash nel nome della cartella, mi sono imbattuto (tramite questa risposta ):

http://blogs.msdn.com/b/rprabhu/archive/2005/06/29/433979.aspx

(modifica: collegamento Wayback Machine: https://web.archive.org/web/20160307233557/http://blogs.msdn.com:80/b/rprabhu/archive/2005/06/29/433979.aspx )

Il percorso esatto dei user.configfile è simile a questo:

<Profile Directory>\<Company Name>\<App Name>_<Evidence Type>_<Evidence Hash>\<Version>\user.config

dove

<Profile Directory>- è la directory del profilo di roaming o quella locale. Le impostazioni vengono memorizzate per impostazione predefinita nel user.configfile locale . Per memorizzare un'impostazione nel il roaming user.configdi file, è necessario marcare l'impostazione con la SettingsManageabilityAttributecon la SettingsManageabilityserie a Roaming.

<Company Name>- è tipicamente la stringa specificata da AssemblyCompanyAttribute(con l'avvertenza che la stringa viene sottoposta a escape e troncata se necessario, e se non specificato sull'assembly, abbiamo una procedura di fallback).

<App Name>- è tipicamente la stringa specificata da AssemblyProductAttribute(stessi avvertimenti del nome della società).

<Evidence Type>e <Evidence Hash>- informazioni derivate dall'evidenza del dominio dell'app per fornire il dominio dell'app appropriato e l'isolamento dell'assembly.

<Version>- tipicamente la versione specificata nel file AssemblyVersionAttribute. Ciò è necessario per isolare le diverse versioni dell'app distribuite fianco a fianco.

Il nome del file è sempre semplicemente " user.config".


Purtroppo il collegamento al blog è interrotto. Sono sicuro che sarebbe stato interessante.
UweBaemayr

3

Si trova in una cartella con il nome dell'applicazione nella cartella Dati applicazioni nella cartella home dell'utente (C: \ documents and settings \ user su xp e c: \ users \ user su Windows Vista).

Ci sono anche alcune informazioni qui .

PS: - prova ad accedervi tramite% appdata% nella casella di esecuzione!


2

Ehm, non puoi semplicemente usare Settings.Default.Reset () per ripristinare le impostazioni predefinite?


1

Tutte le tue impostazioni sono memorizzate nel rispettivo file .config.

Il file .settings fornisce semplicemente una classe fortemente tipizzata per un insieme di impostazioni che appartengono insieme, ma le impostazioni effettive sono memorizzate in app.config o in un file .config nell'applicazione.

Se aggiungi un file .settings, verrà automaticamente aggiunto un app.config per ospitare le impostazioni se non ne hai già uno.


1

Se il tuo file delle impostazioni è in un'app web, sarà nel file web.config (proprio sotto il tuo progetto. Se sono in qualsiasi altro tipo di progetto, saranno nel file app.config (anche sotto il tuo progetto) .

modificare

Come sottolineato nei commenti: le impostazioni dell'applicazione in fase di progettazione si trovano in un file app.config per applicazioni diverse dalle applicazioni web. Quando si compila, il file app.config viene copiato nella directory di output e verrà denominato yourexename .exe.config . In fase di esecuzione, verrà letto solo il file denominato yourexename.exe.config.


1
Non corretto. Non è presente alcun file di impostazioni app.config nell'applicazione in esecuzione, perché app.config verrà rinominato in [appname] .exe.config. E comunque questo file conterrà solo le impostazioni di ApplicationScoped da settings.settins.
arbitro

@arbiter: Forse ho capito male la domanda, ma sembrava che Adam stesse chiedendo informazioni sulle impostazioni predefinite in fase di progettazione. Questi sono memorizzati in app.config. In fase di compilazione, il file app.config viene copiato nella directory di compilazione e rinominato in (theapp.exe.config). Tuttavia, se modifichi direttamente quel file (e lavori in Visual Studio), corri il rischio che i contenuti vengano sovrascritti la prossima volta che crei. Conclusione: per un'app distribuita (o se si esegue all'esterno dell'IDE), modificare il file name.exe.config). Se stai lavorando in VS, modifica il valore predefinito nelle impostazioni o app.config
JMarsch

0

Due file: 1) Un file app.config o web.config. Le impostazioni possono essere personalizzate dopo la creazione con un editor di testo. 2) Il file settings.designer.cs. Questo file ha un codice generato automaticamente per caricare l'impostazione dal file di configurazione, ma è presente anche un valore predefinito nel caso in cui il file di configurazione non abbia l'impostazione particolare.


0

So che ha già risposto, ma non potresti semplicemente sincronizzare le impostazioni nel designer delle impostazioni per tornare alle impostazioni predefinite?

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.