.NET Framework
impostazioni
Ricerca…
AppSettings da ConfigurationSettings in .NET 1.x
Utilizzo sconsigliato
La classe ConfigurationSettings era il modo originale per recuperare le impostazioni per un assembly in .NET 1.0 e 1.1. È stato sostituito dalla classe ConfigurationManager e dalla classe WebConfigurationManager .
Se si hanno due chiavi con lo stesso nome nella sezione appSettings
del file di configurazione, viene utilizzato l'ultimo.
app.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="keyName" value="anything, as a string"/>
<add key="keyNames" value="123"/>
<add key="keyNames" value="234"/>
</appSettings>
</configuration>
Program.cs
using System;
using System.Configuration;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
string keyValue = ConfigurationSettings.AppSettings["keyName"];
Debug.Assert("anything, as a string".Equals(keyValue));
string twoKeys = ConfigurationSettings.AppSettings["keyNames"];
Debug.Assert("234".Equals(twoKeys));
Console.ReadKey();
}
}
}
Leggere AppSettings da ConfigurationManager in .NET 2.0 e versioni successive
La classe ConfigurationManager supporta la proprietà AppSettings
, che consente di continuare a leggere le impostazioni dalla sezione appSettings
di un file di configurazione allo stesso modo di .NET 1.x supportato.
app.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="keyName" value="anything, as a string"/>
<add key="keyNames" value="123"/>
<add key="keyNames" value="234"/>
</appSettings>
</configuration>
Program.cs
using System;
using System.Configuration;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
string keyValue = ConfigurationManager.AppSettings["keyName"];
Debug.Assert("anything, as a string".Equals(keyValue));
var twoKeys = ConfigurationManager.AppSettings["keyNames"];
Debug.Assert("234".Equals(twoKeys));
Console.ReadKey();
}
}
}
Introduzione all'applicazione fortemente tipizzata e al supporto delle impostazioni utente di Visual Studio
Visual Studio aiuta a gestire le impostazioni dell'utente e dell'applicazione. L'utilizzo di questo approccio ha questi vantaggi rispetto all'utilizzo della sezione appSettings
del file di configurazione.
Le impostazioni possono essere fatte fortemente battute. Qualsiasi tipo che può essere serializzato può essere utilizzato per un valore di impostazione.
Le impostazioni dell'applicazione possono essere facilmente separate dalle impostazioni dell'utente. Le impostazioni dell'applicazione sono memorizzate in un unico file di configurazione:
web.config
per siti Web e applicazioni Web e app.config, rinominato come assembly .exe.config, dove assembly è il nome dell'eseguibile. Le impostazioni utente (non utilizzate dai progetti Web) sono memorizzate in un fileuser.config
nella cartella Dati dell'applicazione dell'utente (che varia con la versione del sistema operativo).Le impostazioni dell'applicazione dalle librerie di classi possono essere combinate in un singolo file di configurazione senza il rischio di conflitti di nome, poiché ogni libreria di classi può avere una propria sezione delle impostazioni personalizzate.
Nella maggior parte dei tipi di progetto, la finestra di dialogo Proprietà progetto ha una scheda Impostazioni che è il punto di partenza per la creazione di applicazioni e impostazioni utente personalizzate. Inizialmente, la scheda Impostazioni sarà vuota, con un singolo collegamento per creare un file di impostazioni predefinito. Cliccando sul link si ottengono queste modifiche:
Se un file di configurazione (
app.config
oweb.config
) non esiste per il progetto, ne verrà creato uno.La scheda Impostazioni verrà sostituita con un controllo griglia che consente di creare, modificare ed eliminare voci di impostazioni individuali.
In Esplora soluzioni, viene aggiunta una voce
Settings.settings
nella cartella speciale Proprietà. Aprendo questo elemento si aprirà la scheda Impostazioni.Un nuovo file con una nuova classe parziale viene aggiunto nella cartella
Properties
nella cartella del progetto. Questo nuovo file è denominatoSettings.Designer.__
(.cs, .vb, ecc.) E la classe è denominataSettings
. La classe è generata dal codice, quindi non dovrebbe essere modificata, ma la classe è una classe parziale, quindi è possibile estendere la classe inserendo membri aggiuntivi in un file separato. Inoltre, la classe viene implementata utilizzando Singleton Pattern, esponendo l'istanza singleton con la proprietàDefault
.
Quando aggiungi ogni nuova voce alla scheda Impostazioni, Visual Studio fa queste due cose:
Salva le impostazioni nel file di configurazione, in una sezione di configurazione personalizzata progettata per essere gestita dalla classe Impostazioni.
Crea un nuovo membro nella classe Impostazioni per leggere, scrivere e presentare le impostazioni nel tipo specifico selezionato dalla scheda Impostazioni.
Lettura delle impostazioni fortemente tipizzate dalla sezione personalizzata del file di configurazione
A partire da una nuova classe Settings e dalla sezione di configurazione personalizzata:
Aggiungere un'impostazione dell'applicazione denominata ExampleTimeout, utilizzando l'ora System.Timespan e impostare il valore su 1 minuto:
Salva le proprietà del progetto, che salva le voci della scheda Impostazioni, oltre a rigenerare la classe Impostazioni personalizzate e aggiorna il file di configurazione del progetto.
Usa l'impostazione dal codice (C #):
Program.cs
using System;
using System.Diagnostics;
using ConsoleApplication1.Properties;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
TimeSpan exampleTimeout = Settings.Default.ExampleTimeout;
Debug.Assert(TimeSpan.FromMinutes(1).Equals(exampleTimeout));
Console.ReadKey();
}
}
}
Sotto le coperte
Cerca nel file di configurazione del progetto per vedere come è stata creata la voce di impostazione dell'applicazione:
app.config (Visual Studio aggiorna automaticamente)
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="ConsoleApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<appSettings />
<applicationSettings>
<ConsoleApplication1.Properties.Settings>
<setting name="ExampleTimeout" serializeAs="String">
<value>00:01:00</value>
</setting>
</ConsoleApplication1.Properties.Settings>
</applicationSettings>
</configuration>
Si noti che la sezione appSettings
non viene utilizzata. La sezione applicationSettings
contiene una sezione personalizzata dello spazio dei nomi con un elemento di setting
per ogni voce. Il tipo del valore non è memorizzato nel file di configurazione; è noto solo dalla classe Settings
.
Cerca nella classe Settings
per vedere come usa la classe ConfigurationManager
per leggere questa sezione personalizzata.
Settings.designer.cs (per progetti C #)
...
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("00:01:00")]
public global::System.TimeSpan ExampleTimeout {
get {
return ((global::System.TimeSpan)(this["ExampleTimeout"]));
}
}
...
Si noti che è stato creato un DefaultSettingValueAttribute
per memorizzare il valore immesso nella scheda Impostazioni della finestra di dialogo Proprietà progetto. Se la voce non è presente nel file di configurazione, viene utilizzato questo valore predefinito.