2013-02-11 11 views
27

Sto usando il file app.config che viene creato con un'applicazione console e posso leggere il val1 del key1 utilizzando il ConfigurationSettings.AppSettings["key1"].ToString()sub appSettings nel nodo appsetting C#

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

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

</appSettings> </configuration>

ma ho troppe chiavi e valori che voglio per renderli categorizzati.

ho trovato qualcosa che è difficile da utilizzare nella mia richiesta perché voglio accedere alle chiavi in ​​un modo simile a quello sopra uno

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

per esempio quello che voglio fare:

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

e se c'è un modo per accedervi utilizzando ConfigurationSettings.AppSettings["Section1"].["key1"].ToString()

risposta

57

È possibile aggiungere sezioni personalizzate in app.config senza scrivere codice aggiuntivo. Tutto quello che dovete fare è nuova sezione "dichiarando" in configSections nodo del genere

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

e poi si può definire questa sezione riempiendolo di chiavi e valori:

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

Per ottenere il valore di una chiave da questa sezione è necessario aggiungere System.Configuration dll come riferimento al progetto, aggiungere using e utilizzare il metodo GetSection. Esempio:

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

cosa bella è che si può facilmente fare gruppi di sezioni se avete bisogno di questo:

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

Se si utilizzano i gruppi, per accedere alle sezioni devi accedervi utilizzando il formato {group name}/{section name}:

+0

Per chiarire, 'configSections' è semplicemente un figlio del nodo 'configurazione': [MSDN] (https://msdn.microsoft.com/en-us/library/aa903350 (v = vs.71). aspx) – Alex

0

AFAIK y puoi implementare una sezione personalizzata al di fuori delle impostazioni dell'app. Ad esempio, framework come Autofac e SpecFlow utilizzano questo tipo di sessioni per supportare il proprio schema di configurazione. Puoi dare un'occhiata all'articolo this MSDN per capire come farlo. Spero possa aiutare.

+0

Userò il nome della sezione prima di ogni nome di chiave per modificarlo e tenerli tutti in un nodo (il nodo appSettings) perché sembra che sia difficile da fare Grazie –