2012-10-13 3 views
10


Sono un principiante con sezioni di configurazione C#
Voglio creare una sezione personalizzata nel file di configurazione. Quello che ho provato dopo googling è come segue
Config del file:
Sezione di configurazione personalizzata in App.config C#

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <sectionGroup name="MyCustomSections"> 
     <section name="CustomSection" type="CustomSectionTest.CustomSection,CustomSection"/> 
    </sectionGroup> 
    </configSections> 

    <MyCustomSections> 
    <CustomSection key="Default"/> 
    </MyCustomSections> 
</configuration> 


CustomSection.cs

namespace CustomSectionTest 
{ 
    public class CustomSection : ConfigurationSection 
    { 
     [ConfigurationProperty("key", DefaultValue="Default", IsRequired = true)] 
     [StringValidator(InvalidCharacters = "[email protected]#$%^&*()[]{}/;'\"|\\", MinLength = 1, MaxLength = 60)] 
     public String Key 
     { 
      get { return this["key"].ToString(); } 
      set { this["key"] = value; } 
     } 
    } 
} 


Quando uso questo codice per recuperare Sezione I ottenere un errore che dice errore di configurazione.

var cf = (CustomSection)System.Configuration.ConfigurationManager.GetSection("CustomSection"); 


Che cosa mi manca?
Grazie.

Modifica
Che cosa ho bisogno in ultima analisi, è

<CustomConfigSettings> 
    <Setting id="1"> 
     <add key="Name" value="N"/> 
     <add key="Type" value="D"/> 
    </Setting> 
    <Setting id="2"> 
     <add key="Name" value="O"/> 
     <add key="Type" value="E"/> 
    </Setting> 
    <Setting id="3"> 
     <add key="Name" value="P"/> 
     <add key="Type" value="F"/> 
    </Setting> 
</CustomConfigSettings> 
+1

Si prega di consultare le seguenti domande: http://stackoverflow.com/questions/3935331/how-to-implement-a-configurationection-with-a-configurationelementcollection http://stackoverflow.com/questions/7983127/custom- configurationsection http://stackoverflow.com/questions/4738/using-configurationmanager-to-load-config-from-an-arbitrary-location – bytebuster

risposta

30

App.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <sectionGroup name="customAppSettingsGroup"> 
     <section name="customAppSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    </sectionGroup> 
    </configSections> 
    <customAppSettingsGroup> 
    <customAppSettings> 
     <add key="KeyOne" value="ValueOne"/> 
     <add key="KeyTwo" value="ValueTwo"/> 
    </customAppSettings> 
    </customAppSettingsGroup> 
</configuration> 

Usage:

NameValueCollection settings = 
    ConfigurationManager.GetSection("customAppSettingsGroup/customAppSettings") 
    as System.Collections.Specialized.NameValueCollection; 

if (settings != null) 
{ 
foreach (string key in settings.AllKeys) 
{ 
    Response.Write(key + ": " + settings[key] + "<br />"); 
} 
} 
+13

Per tutti coloro che vogliono farlo funzionare in fretta. 3 cose: 1. DEVI AGGIUNGERE un riferimento a System.Configuration nei tuoi riferimenti, 2. using System.Configuration; 3. using System.Collections.Specialized; –

+2

È anche possibile omettere il gruppo (customAppSettingsGroup) se lo si desidera. – Jess

1

utilizzare:

var cf = (CustomSection)System.Configuration.ConfigurationManager.GetSection("MyCustomSections/CustomSection"); 

Hai bisogno di entrambi il nome del gruppo di sezione e la sezione personalizzata.

+0

Grazie per la vostra risposta, ma questo non ha funzionato per me in qualche modo. per favore guarda la parte modificata della domanda. –

-2

Evidenziare ConfigurationSection premere F1, vedrete che l'implementazione sul sito Web MSDN sovrascrive una proprietà chiamata "Proprietà "che restituisce un" ConfigurationPropertyCollection ", poiché le proprietà hanno un attributo corrispondente di quel tipo dovresti essere in grado di popolare questo coll ection con le tue proprietà se non li avvolgi nello stesso modo in cui i ragazzi della MS hanno.