.NET Framework
instellingen
Zoeken…
AppSettings van ConfigurationSettings in .NET 1.x
Verouderd gebruik
De klasse ConfigurationSettings was de oorspronkelijke manier om instellingen op te halen voor een assembly in .NET 1.0 en 1.1. Het is vervangen door de klasse ConfigurationManager en de klasse WebConfigurationManager .
Als u twee sleutels met dezelfde naam hebt in het gedeelte appSettings
van het configuratiebestand, wordt de laatste gebruikt.
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();
}
}
}
App-instellingen lezen van ConfigurationManager in .NET 2.0 en hoger
De klasse ConfigurationManager ondersteunt de eigenschap AppSettings
, waarmee u instellingen uit het gedeelte appSettings
van een configuratiebestand kunt blijven lezen op dezelfde manier als .NET 1.x wordt ondersteund.
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();
}
}
}
Inleiding tot krachtig getypeerde applicatie- en gebruikersinstellingenondersteuning van Visual Studio
Visual Studio helpt gebruikers- en applicatie-instellingen te beheren. Het gebruik van deze aanpak heeft deze voordelen ten opzichte van het gebruik van het gedeelte appSettings
van het configuratiebestand.
Instellingen kunnen sterk worden getypt. Elk type dat kan worden geserialiseerd kan worden gebruikt voor een instellingswaarde.
Applicatie-instellingen kunnen eenvoudig worden gescheiden van gebruikersinstellingen. Applicatie-instellingen worden opgeslagen in een enkel configuratiebestand:
web.config
voor websites en webapplicaties, en app.config, hernoemd als assembly .exe.config, waarbij assembly de naam van het uitvoerbare bestand is. Gebruikersinstellingen (niet gebruikt door webprojecten) worden opgeslagen in eenuser.config
bestand in de map Application Data van de gebruiker (afhankelijk van de versie van het besturingssysteem).Applicatie-instellingen uit klassenbibliotheken kunnen worden gecombineerd tot een enkel configuratiebestand zonder het risico van naambotsingen, omdat elke klassenbibliotheek zijn eigen aangepaste instellingensectie kan hebben.
In de meeste projecttypen heeft de Projecteigenschappenontwerper een tabblad Instellingen dat het startpunt is voor het maken van aangepaste applicatie- en gebruikersinstellingen. Aanvankelijk is het tabblad Instellingen leeg, met een enkele koppeling om een standaardinstellingenbestand te maken. Klikken op de link resulteert in deze wijzigingen:
Als er geen configuratiebestand (
app.config
ofweb.config
) bestaat voor het project, wordt er een gemaakt.Het tabblad Instellingen wordt vervangen door een rasterbesturing waarmee u afzonderlijke instellingen kunt maken, bewerken en verwijderen.
In Solution Explorer wordt een item
Settings.settings
toegevoegd onder de speciale map Eigenschappen. Als u dit item opent, wordt het tabblad Instellingen geopend.Een nieuw bestand met een nieuwe gedeeltelijke klasse wordt toegevoegd onder de map
Properties
in de projectmap. Dit nieuwe bestand heeft de naamSettings.Designer.__
(.cs, .vb, enz.) En de klasse heeft de naamSettings
. De klasse is code-gegenereerd, dus het moet niet worden bewerkt, maar de klasse is een gedeeltelijke klasse, dus u kunt de klasse uitbreiden door extra leden in een afzonderlijk bestand te plaatsen. Verder wordt de klasse geïmplementeerd met behulp van het Singleton-patroon, waardoor de singleton-instantie wordt blootgesteld aan de eigenschapDefault
.
Terwijl u elk nieuw item toevoegt aan het tabblad Instellingen, doet Visual Studio deze twee dingen:
Slaat de instelling op in het configuratiebestand, in een aangepast configuratiegedeelte dat is ontworpen om te worden beheerd door de klasse Instellingen.
Maakt een nieuw lid in de klasse Instellingen om de instelling te lezen, te schrijven en te presenteren in het specifieke type dat is geselecteerd op het tabblad Instellingen.
Sterk getypte instellingen lezen uit een aangepast gedeelte van het configuratiebestand
Beginnend met een nieuwe klasse Instellingen en een aangepaste configuratiesectie:
Voeg een applicatie-instelling met de naam ExampleTimeout toe met behulp van de tijd System.Timespan en stel de waarde in op 1 minuut:
Sla de projecteigenschappen op, waardoor de vermeldingen op het tabblad Instellingen worden opgeslagen, evenals de aangepaste klasse Instellingen opnieuw wordt gegenereerd en het projectconfiguratiebestand wordt bijgewerkt.
Gebruik de instelling van code (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();
}
}
}
Onder de dekens
Kijk in het projectconfiguratiebestand om te zien hoe het item van de applicatie-instelling is gemaakt:
app.config (Visual Studio werkt dit automatisch bij)
<?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>
Merk op dat het gedeelte appSettings
niet wordt gebruikt. De sectie applicationSettings
bevat een sectie met aangepaste naamruimtes die een setting
voor elk item. Het type waarde wordt niet opgeslagen in het configuratiebestand; het is alleen bekend bij de klasse Settings
.
Kijk in de klasse Settings
om te zien hoe deze de klasse ConfigurationManager
gebruikt om dit aangepaste gedeelte te lezen.
Settings.designer.cs (voor C # projecten)
...
[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"]));
}
}
...
Merk op dat er een DefaultSettingValueAttribute
is gemaakt om de waarde op te slaan die is ingevoerd op het tabblad Instellingen van de Project Properties Designer. Als het item ontbreekt in het configuratiebestand, wordt in plaats daarvan deze standaardwaarde gebruikt.