2012-10-30 6 views
11

Ich versuche, eine benutzerdefinierte Config-Abschnitt zu erstellen, um die Liste der ‚Öfen‘ meine Anwendung Monitore zu laden. Dies ist meine erste Erfahrung mit Konfigurationsabschnitten und ich habe versucht, den Beispielen zu folgen; aber ich kann nicht herausfinden, was ich vermisse.Kann nicht meine benutzerdefinierte Konfiguration Abschnitt erhalten

Wenn ich versuche, die Config-Abschnitt I die folgende Ausnahme erhalten zu erhalten:

ein Fehler den Konfigurationsabschnitt Handler für BurnIn aufgetreten erstellen: Typ konnte nicht geladen werden ‚BurnIn.UI.BurnInConfigurationSection‘ von der Montage-System‘ .Konfiguration, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a '. (C: \ MKS \ BurnIn \ PC_SW \ bin \ BurnIn.UI.vshost.exe.config Zeile 8)

in meinem Haupt I versucht: System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration (ConfigurationUserLevel .Keiner); if (config.Sections [BurnInSection] == null) ...

BurnInConfigurationSection burnInConfigSection = config.GetSection(BurnInSection) as BurnInConfigurationSection; 

BurnInConfigurationSection burnInConfigSection = ConfigurationManager.GetSection(BurnInSection) as BurnInConfigurationSection; 

Alles scheint

in der gleichen Ausnahme führen

Wenn ich config.FilePath sehen es „C: \ MKS \ BurnIn \ PC_SW \ bin \ BurnIn.UI.vshost.exe.config ", das ich verifiziert habe, stimmt mit der Datei app.config überein.

Hier sind meine Konfigurationsklassen:

namespace BurnIn.UI 
{ 
/// <summary> 
/// BurnIn Application configuration section in app.config 
/// </summary> 
public class BurnInConfigurationSection : ConfigurationSection 
{ 
    [ConfigurationProperty("Ovens", IsDefaultCollection = false)] 
    [ConfigurationCollection(typeof(OvenCollection), 
     AddItemName = "add", 
     ClearItemsName = "clear", 
     RemoveItemName = "remove")] 
    public OvenCollection Ovens 
    { 
     get { return (OvenCollection)base["Ovens"]; } 
     set { base["Ovens"] = value; } 
    } 
} 

/// <summary> 
/// Oven configuration information 
/// </summary> 
public class OvenConfig : ConfigurationElement 
{ 
    public OvenConfig() { } 

    public OvenConfig(string nickName, string mesName, string ip, int slotCount) 
    { 
     NickName = nickName; 
     MesName = mesName; 
     IP = ip; 
     SlotCount = slotCount; 
    } 

    [ConfigurationProperty("NickName", DefaultValue = "OvenName", IsRequired = true, IsKey = true)] 
    public string NickName 
    { 
     get { return (string)this["NickName"]; } 
     set { this["NickName"] = value; } 
    } 

    [ConfigurationProperty("MesName", DefaultValue = "MesName", IsRequired = true, IsKey = true)] 
    public string MesName 
    { 
     get { return (string)this["MesName"]; } 
     set { this["MesName"] = value; } 
    } 

    [ConfigurationProperty("IP", DefaultValue = "10.130.110.20", IsRequired = true, IsKey = false)] 
    public string IP 
    { 
     get { return (string)this["IP"]; } 
     set { this["IP"] = value; } 
    } 

    [ConfigurationProperty("SlotCount", DefaultValue = "20", IsRequired = true, IsKey = false)] 
    public int SlotCount 
    { 
     get { return (int)this["SlotCount"]; } 
     set { this["SlotCount"] = value; } 
    } 

} 
/// <summary> 
/// Collection of Oven Configs 
/// </summary> 
public class OvenCollection : ConfigurationElementCollection 
{ 
    public OvenCollection() 
    { 
    } 

    public OvenConfig this[int index] 
    { 
     get { return (OvenConfig)BaseGet(index); } 
     set 
     { 
      if (BaseGet(index) != null) 
      { 
       BaseRemoveAt(index); 
      } 
      BaseAdd(index, value); 
     } 
    } 

    public void Add(OvenConfig ovenConfig) 
    { 
     BaseAdd(ovenConfig); 
    } 

    public void Clear() 
    { 
     BaseClear(); 
    } 

    protected override ConfigurationElement CreateNewElement() 
    { 
     return new OvenConfig(); 
    } 

    protected override object GetElementKey(ConfigurationElement element) 
    { 
     return ((OvenConfig)element).NickName; 
    } 

    public void Remove(OvenConfig ovenConfig) 
    { 
     BaseRemove(ovenConfig.NickName); 
    } 

    public void RemoveAt(int index) 
    { 
     BaseRemoveAt(index); 
    } 

    public void Remove(string name) 
    { 
     BaseRemove(name); 
    } 
} 
} 

Hier ist meine app.config:

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
     <section name="Biotronik.NGMP.DAL.Sources.DalBaseSettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
    <section name="BurnIn" type="BurnIn.UI.BurnInConfigurationSection"/> 
    </configSections> 
    <applicationSettings> 
    <Biotronik.NGMP.DAL.Sources.DalBaseSettings> 
     <setting name="ConfigFileName" serializeAs="String"> 
     <value>DalConfig.xml</value> 
     </setting> 
     <setting name="MappingFileName" serializeAs="String"> 
     <value>BurnInTestPlanMap.tpx</value> 
     </setting> 
    </Biotronik.NGMP.DAL.Sources.DalBaseSettings> 
    </applicationSettings> 
    <connectionStrings> 
    <add name="BurnInConnection" connectionString="metadata=res://*/BurnIn.csdl|res://*/BurnIn.ssdl|res://*/BurnIn.msl;provider=Oracle.DataAccess.Client;provider connection string=&quot;DATA SOURCE=XXXX;PASSWORD=xxxx;PERSIST SECURITY INFO=True;USER ID=XXXX&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <log4net configSource="BurnInLog4net.config"/> 
    <BurnIn> 
    <Ovens> 
     <add NickName="Mark's Oven" MesName="MESBOven" IP="10.130.110.20" SlotCount="5"/> 
     <add NickName="Real Oven" MesName="MESOven1" IP="10.130.110.50" SlotCount="20"/> 
    </Ovens> 
    </BurnIn> 
    <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> 
</configuration> 

Antwort

23

Ich glaube, Sie Namen falsch Konfiguration Abschnittsart hier gesetzt haben:

<section name="Biotronik.NGMP.DAL.Sources.DalBaseSettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

Sie sollten Namen der benutzerdefinierten configuratio verwenden n Abschnitt Typ hier:

type="BurnIn.UI.BurnInConfigurationSection, AssemblyWhereThisTypeIsDeclared" 
+0

Dieser Abschnitt ist für eine andere DLL, die ich benutze. Die, den ich zu laden versuchen ist:

Was kann ich für Yourassembly verwenden? – markshancock

+0

@markshancock dann Name der Versammlung angeben, wo 'BurnInConfigurationSection' deklariert –

+0

Is in App.xaml.cs in der Hauptbaugruppe definiert ist (BurnIn.UI) – markshancock