.NET Framework
inställningar
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.
Inställningar kan göras starkt skrivna. Alla typer som kan serialiseras kan användas för ett inställningsvärde.
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 enuser.config
fil i användarens mapp Application Data (som varierar med operativsystemversionen).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:
Om en konfigurationsfil (
app.config
ellerweb.config
) inte finns för projektet, skapas en.Inställningsfliken kommer att ersättas med en rutnätkontroll som gör att du kan skapa, redigera och ta bort enskilda inställningsposter.
I Lösningsutforskaren läggs ett
Settings.settings
till under Specialmappen Egenskaper. Om du öppnar detta objekt öppnas fliken Inställningar.En ny fil med en ny delklass läggs till under mappen
Properties
i projektmappen. Den här nya filen heterSettings.Designer.__
(.cs, .vb, etc.), och klassen heterSettings
. 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 heterDefault
.
När du lägger till varje ny post på fliken Inställningar gör Visual Studio dessa två saker:
Sparar inställningen i konfigurationsfilen i ett anpassat konfigurationsavsnitt som är utformat för att hanteras av klassen Inställningar.
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:
Lägg till en applikationsinställning, ExempelTimeout, med tiden System.Timespan och ställ in värdet till 1 minut:
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.