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.

  1. Instellingen kunnen sterk worden getypt. Elk type dat kan worden geserialiseerd kan worden gebruikt voor een instellingswaarde.

  2. 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 een user.config bestand in de map Application Data van de gebruiker (afhankelijk van de versie van het besturingssysteem).

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

  1. Als er geen configuratiebestand ( app.config of web.config ) bestaat voor het project, wordt er een gemaakt.

  2. Het tabblad Instellingen wordt vervangen door een rasterbesturing waarmee u afzonderlijke instellingen kunt maken, bewerken en verwijderen.

  3. In Solution Explorer wordt een item Settings.settings toegevoegd onder de speciale map Eigenschappen. Als u dit item opent, wordt het tabblad Instellingen geopend.

  4. Een nieuw bestand met een nieuwe gedeeltelijke klasse wordt toegevoegd onder de map Properties in de projectmap. Dit nieuwe bestand heeft de naam Settings.Designer.__ (.cs, .vb, enz.) En de klasse heeft de naam Settings . 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 eigenschap Default .

Terwijl u elk nieuw item toevoegt aan het tabblad Instellingen, doet Visual Studio deze twee dingen:

  1. Slaat de instelling op in het configuratiebestand, in een aangepast configuratiegedeelte dat is ontworpen om te worden beheerd door de klasse Instellingen.

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

Tabblad Instellingen van de Projecteigenschappen Designer

Voeg een applicatie-instelling met de naam ExampleTimeout toe met behulp van de tijd System.Timespan en stel de waarde in op 1 minuut:

Tabblad Instellingen tijdens het toevoegen van de applicatie-instelling van ExampleTimeout

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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow