Sök…


AppSettings från ConfigurationSettings i .NET 1.x

Avskrivad användning

Klassen ConfigurationSettings var det ursprungliga sättet att hämta inställningar för en enhet i .NET 1.0 och 1.1. Det har ersatts av klassen ConfigurationManager och klassen WebConfigurationManager .

Om du har två nycklar med samma namn i avsnittet appSettings i konfigurationsfilen används den sista.

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();
        }
    }
}

Läser AppSettings från ConfigurationManager i .NET 2.0 och senare

Klassen ConfigurationManager stöder egenskapen AppSettings , som gör att du kan fortsätta läsa inställningarna från avsnittet appSettings i en konfigurationsfil på samma sätt som .NET 1.x stöds.

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();
        }
    }
}

Introduktion till starkt typ av applikations- och användarinställningsstöd från Visual Studio

Visual Studio hjälper till att hantera användar- och applikationsinställningar. Att använda denna metod har dessa fördelar jämfört med att använda appSettings avsnittet i konfigurationsfilen.

  1. Inställningar kan göras starkt skrivna. Alla typer som kan serialiseras kan användas för ett inställningsvärde.

  2. Programinställningar kan enkelt separeras från användarinställningar. Programinställningar lagras i en enda konfigurationsfil: web.config för webbplatser och webbapplikationer och app.config, som byts namn till montering .exe.config, där montering är namnet på den körbara. Användarinställningar (som inte används av webbprojekt) lagras i en user.config fil i användarens mapp Application Data (som varierar med operativsystemversionen).

  3. Programinställningar från klassbibliotek kan kombineras till en enda konfigurationsfil utan risk för namnkollisioner, eftersom varje klassbibliotek kan ha sin egen anpassade inställningssektion.

I de flesta projekttyper har Project Properties Designer en flik Inställningar som är utgångspunkten för att skapa anpassade applikations- och användarinställningar. Ursprungligen kommer fliken Inställningar att vara tom, med en enda länk för att skapa en standardinställningsfil. Klicka på länken resulterar i dessa ändringar:

  1. Om en konfigurationsfil ( app.config eller web.config ) inte finns för projektet, skapas en.

  2. Inställningsfliken kommer att ersättas med en rutnätkontroll som gör att du kan skapa, redigera och ta bort enskilda inställningsposter.

  3. I Lösningsutforskaren läggs ett Settings.settings till under Specialmappen Egenskaper. Om du öppnar detta objekt öppnas fliken Inställningar.

  4. En ny fil med en ny delklass läggs till under mappen Properties i projektmappen. Den här nya filen heter Settings.Designer.__ (.cs, .vb, etc.), och klassen heter Settings . Klassen är kodgenererad, så den bör inte redigeras, men klassen är en delklass, så du kan utöka klassen genom att lägga till ytterligare medlemmar i en separat fil. Dessutom implementeras klassen med hjälp av Singleton-mönstret och exponerar singleton-instansen med egenskapen som heter Default .

När du lägger till varje ny post på fliken Inställningar gör Visual Studio dessa två saker:

  1. Sparar inställningen i konfigurationsfilen i ett anpassat konfigurationsavsnitt som är utformat för att hanteras av klassen Inställningar.

  2. Skapar en ny medlem i klassen Inställningar för att läsa, skriva och presentera inställningen i den specifika typen som väljs från fliken Inställningar.

Läser starkt skrivna inställningar från anpassade avsnitt i konfigurationsfilen

Börjar från en ny inställningsklass och anpassad konfigurationsavsnitt:

Inställningsfliken för Project Properties Designer

Lägg till en applikationsinställning, ExempelTimeout, med tiden System.Timespan och ställ in värdet till 1 minut:

Inställningsfliken medan du lägger till applikationsinställningen ExempelTimeout

Spara projektegenskaperna, som sparar inställningarna i fliken Inställningar, samt genererar den anpassade inställningsklassen och uppdaterar projektkonfigurationsfilen.

Använd inställningen från kod (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();
        }
    }
}

Under täcket

Titta i projektkonfigurationsfilen för att se hur applikationsinställningen har skapats:

app.config (Visual Studio uppdaterar detta automatiskt)

<?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>

Lägg märke till att avsnittet appSettings inte används. applicationSettings avsnittet innehåller ett anpassat namnutrymme-avsnitt som har ett setting för varje post. Typen av värdet lagras inte i konfigurationsfilen; det är endast känt av klassen Settings .

Titta i klassen Settings att se hur den använder klassen ConfigurationManager att läsa detta anpassade avsnitt.

Settings.designer.cs (för C # -projekt)

...
    [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"]));
        }
    }
...

Lägg märke till att ett DefaultSettingValueAttribute skapades för att lagra värdet som anges på fliken Inställningar i Project Properties Designer. Om posten saknas i konfigurationsfilen används standardvärdet istället.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow