2013-02-11 2 views
27

Ich verwende die app.config-Datei, die mit einer Konsole-Anwendung erstellt wird, und ich kann die val1 des Schlüssel1 mit dem ConfigurationSettings.AppSettings["key1"].ToString()Unter appsettings in Appsetting Knoten C#

<startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" /> </startup> `

lesen
<add key="key1" value="val1" /> 
<add key="key2" value="val2" /> 

</appSettings> </configuration>

aber ich habe zu viele Schlüssel und Werte, die ich will um sie zu kategorisieren.

Ich habe etwas gefunden, das schwer in meiner Anwendung zu verwenden, da ich die Schlüssel in ähnlicher Weise zu dem oben ein

Showing all nodes and can't read a node without getting all the nodes

zum Beispiel zugreifen wollen, was ich tun möchte:

<appSettings> 
<Section1> 
    <add key="key1" value="val1" /> 
</Section1> 
<Section2> 
    <add key="key1" value="val1" /> 
<Section2> 
</appSettings> 

und wenn es eine Möglichkeit für den Zugriff mit ConfigurationSettings.AppSettings["Section1"].["key1"].ToString()

Antwort

57

Sie können benutzerdefinierte Abschnitte in app.config hinzufügen, ohne zusätzlichen Code zu schreiben. Alles, was Sie tun müssen, ist neuer Abschnitt in configSections Knoten wie die

<configSections> 
     <section name="genericAppSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    </configSections> 

„erklärt“ und dann können Sie diesen Abschnitt definieren es mit Schlüssel und Werte Füllung:

<genericAppSettings> 
     <add key="testkey" value="generic" /> 
     <add key="another" value="testvalue" /> 
    </genericAppSettings> 

Um Wert eines Schlüssels zu erhalten In diesem Abschnitt müssen Sie die System.Configuration DLL als Referenz zu Ihrem Projekt hinzufügen, using hinzufügen und GetSection Methode verwenden. Beispiel:

using System.Collections.Specialized; 
using System.Configuration; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      NameValueCollection test = (NameValueCollection)ConfigurationManager.GetSection("genericAppSettings"); 

      string a = test["another"]; 
     } 
    } 
} 

Schöne daran ist, dass man leicht Gruppen von Abschnitten machen können, wenn Sie diese brauchen:

<configSections> 
    <sectionGroup name="customAppSettingsGroup"> 
     <section name="genericAppSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
// another sections 
    </sectionGroup> 
</configSections> 

    <customAppSettingsGroup> 
    <genericAppSettings> 
     <add key="testkey" value="generic" /> 
     <add key="another" value="testvalue" /> 
    </genericAppSettings> 
    // another sections 
    </customAppSettingsGroup> 

Wenn Sie Gruppen verwenden, den Zugriff auf Abschnitte, die Sie haben auf sie zuzugreifen {group name}/{section name} Format:

NameValueCollection test = (NameValueCollection)ConfigurationManager.GetSection("customAppSettingsGroup/genericAppSettings"); 
+0

Um zu verdeutlichen, ist "configSections" einfach ein Kind des Knotens "configuration": [MSDN] (https://msdn.microsoft.com/en-us/library/aa903350 (v = vs.71). aspx) – Alex

0

AFAIK y Sie können einen benutzerdefinierten Bereich außerhalb der Appsettings implementieren. Zum Beispiel verwenden Frameworks wie Autofac und SpecFlow diese Art von Sitzungen, um ihr eigenes Konfigurationsschema zu unterstützen. Sie können einen Blick auf this MSDN Artikel werfen, um zu verstehen, wie man das macht. Ich hoffe, das hilft.

+0

ich werde die Abschnittsnamen vor jedem Schlüsselnamen verwenden, ihn zu ändern und sie alle in einem Knoten (den appSettings Knoten) zu halten, weil sie es ist schwierig, scheint 01 zu tun Danke –

Verwandte Themen