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.

  1. Le impostazioni possono essere fatte fortemente battute. Qualsiasi tipo che può essere serializzato può essere utilizzato per un valore di impostazione.

  2. 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 file user.config nella cartella Dati dell'applicazione dell'utente (che varia con la versione del sistema operativo).

  3. 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:

  1. Se un file di configurazione ( app.config o web.config ) non esiste per il progetto, ne verrà creato uno.

  2. La scheda Impostazioni verrà sostituita con un controllo griglia che consente di creare, modificare ed eliminare voci di impostazioni individuali.

  3. In Esplora soluzioni, viene aggiunta una voce Settings.settings nella cartella speciale Proprietà. Aprendo questo elemento si aprirà la scheda Impostazioni.

  4. Un nuovo file con una nuova classe parziale viene aggiunto nella cartella Properties nella cartella del progetto. Questo nuovo file è denominato Settings.Designer.__ (.cs, .vb, ecc.) E la classe è denominata Settings . 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:

  1. Salva le impostazioni nel file di configurazione, in una sezione di configurazione personalizzata progettata per essere gestita dalla classe Impostazioni.

  2. 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:

Scheda Impostazioni della finestra di dialogo Proprietà progetto

Aggiungere un'impostazione dell'applicazione denominata ExampleTimeout, utilizzando l'ora System.Timespan e impostare il valore su 1 minuto:

Scheda Impostazioni durante l'aggiunta dell'impostazione dell'applicazione ExampleTimeout

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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow