2016-06-28 5 views
1

Ich mache eine Anwendung, die ihre Konfigurationsdatei für ihre Einstellungen lesen muss.ConfigurationManager gibt sofort eine TypeInitializationException

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="sswcomm" type="SSWAgent.SSWConfig" /> 
    <section name="folders" type="SSWAgent.SSWConfigFolderCollection" /> 
    <section name="folder" type="SSWAgent.SSWConfigFolderElement" /> 
    </configSections> 
    <sswcomm id="SC_SSWTEST1" connectionInterval="5000"> 
    <folders> 
     <folder id="OUTGOINGATOTEST2" enable="true" includeSubFolders="true" fromPath="C:\temp\a\NET\Outgoing_A" wildcard="*.*" recipientId="C_SSWTEST2" /> 
     <folder id="OUTGOINGBTOTEST3" enable="true" includeSubFolders="true" fromPath="C:\temp\a\NET\Outgoing_B" wildcard="*.*" recipientId="C_SSWTEST3" /> 
    </folders> 
    </sswcomm> 
</configuration> 
wie so

Und der C# -Code:

Ich habe die Einstellungen in der app_config Datei wie so definiert

public sealed class SSWConfig : ConfigurationSection 
    { 
     private static SSWConfig settings = ConfigurationManager.GetSection("sswcomm") as SSWConfig; 

     public static SSWConfig Settings 
     { 
      get { return settings; } 
     } 

     [ConfigurationProperty("id", DefaultValue = "", IsKey = true, IsRequired = true)] 
     [StringValidator(InvalidCharacters = " [email protected]#$%^&*()[]{}/;’\"|\\", MinLength = 1, MaxLength = 256)] 
     public string Id 
     { 
      get { return (string)this["id"]; } 
      set { this["id"] = value; } 
     } 

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

     [ConfigurationProperty("folders", IsDefaultCollection = true, IsKey = false, IsRequired = true)] 
     public SSWConfigFolderCollection Folders 
     { 
      get { return base["folders"] as SSWConfigFolderCollection; } 
     } 

    } 

    public sealed class SSWConfigFolderCollection : ConfigurationElementCollection 
    { 
     protected override ConfigurationElement CreateNewElement() 
     { 
      return new SSWConfigFolderElement(); 
     } 

     protected override object GetElementKey(ConfigurationElement element) 
     { 
      return ((SSWConfigFolderElement)element).Id; 
     } 

     new public SSWConfigFolderElement this[string Id] 
     { 
      get { return (SSWConfigFolderElement)base.BaseGet(Id); } 
     } 

     public override ConfigurationElementCollectionType CollectionType 
     { 
      get 
      { 
       return ConfigurationElementCollectionType.BasicMap; 
      } 
     } 

     public SSWConfigFolderElement this[int index] 
     { 
      get { return (SSWConfigFolderElement)base.BaseGet(index); } 
     } 

     protected override string ElementName 
     { 
      get 
      { 
       return "folder"; 
      } 
     } 
    } 

    public sealed class SSWConfigFolderElement : ConfigurationElement 
    { 
     [ConfigurationProperty("id", DefaultValue = "", IsKey = true, IsRequired = true)] 
     [StringValidator(InvalidCharacters = " [email protected]#$%^&*()[]{}/;’\"|\\", MinLength = 1, MaxLength = 256)] 
     public string Id 
     { 
      get { return (string)base["id"]; } 
      set { base["id"] = value; } 
     } 

     [ConfigurationProperty("enable", DefaultValue = "true", IsKey = false, IsRequired = true)] 
     public bool Enable 
     { 
      get { return (string)base["enable"] == "true"; } 
      set { if (value) { base["enable"] = "true"; } else { base["enable"] = "false"; } } 
     } 

     [ConfigurationProperty("includeSubFolders", DefaultValue = "true", IsKey = false, IsRequired = true)] 
     public bool IncludeSubFolders 
     { 
      get { return (string)base["includeSubFolders"] == "true"; } 
      set { if (value) { base["includeSubFolders"] = "true"; } else { base["enable"] = "false"; } } 
     } 

     [ConfigurationProperty("fromPath", DefaultValue = "", IsKey = false, IsRequired = true)] 
     public string FromPath 
     { 
      get { return (string)base["fromPath"]; } 
      set { base["fromPath"] = value; } 
     } 

     [ConfigurationProperty("wildcard", DefaultValue = "*.*", IsKey = false, IsRequired = true)] 
     public string Wildcard 
     { 
      get { return (string)base["wildcard"]; } 
      set { base["wildcard"] = value; } 
     } 

     [ConfigurationProperty("recipientId", DefaultValue = "", IsKey = false, IsRequired = true)] 
     [StringValidator(InvalidCharacters = " [email protected]#$%^&*()[]{}/;’\"|\\", MinLength = 1, MaxLength = 256)] 
     public string RecipientId 
     { 
      get { return (string)base["recipientId"]; } 
      set { base["recipientId"] = value; } 
     } 
    } 

Nun, wenn ich SSWConfig Call- und Put es in einer Variablen, bekomme ich sofort eine TypeInitializationException Ausnahme. Ich denke, weil der GetSection Teil null zurückgibt. Liegt das daran, dass ich einen Fehler in der App.config-Datei gemacht habe?

Eine app.config mit verschachtelten Elementen ist neu für mich, also könnte es sein, dass ich es falsch definiere.

Antwort

0

Einfach meine Lösung posten.

Anscheinend machte ich es viel härter als es tatsächlich ist. Ich habe von vorne angefangen und nach einigen Änderungen werden meine Einstellungen gelesen.

Ein weiterer Fehler, den ich hatte, ist, dass ich nie wirklich die Konfigurationsdatei (oops) gelesen habe, denkend, dass es automatisch beim Aufrufen der Konfigurationsklasse passieren würde.

Klasse:

// <sswcomm></sswcomm> settings 
public class SSWConfigSSWComm : ConfigurationSection 
{ 
    [ConfigurationProperty("id")] 
    public string Id 
    { 
     get { return (string)this["id"]; } 
     set { this["id"] = value; } 
    } 

    [ConfigurationProperty("connectionInterval")] 
    public int ConnectionInterval 
    { 
     get { return (int)this["connectionInterval"]; } 
     set { this["connectionInterval"] = value; } 
    } 

    [ConfigurationProperty("toPath")] 
    public string ToPath 
    { 
     get { return (string)this["toPath"]; } 
     set { this["toPath"] = value; } 
    } 

    [ConfigurationProperty("folders")] 
    [ConfigurationCollection(typeof(SSWConfigFolderElement), AddItemName = "folder")] 
    public SSWConfigFolderElementCollection sswConfigFolders 
    { 
     get { return (SSWConfigFolderElementCollection)base["folders"]; } 
    } 
} 

// <folder> settings 
[ConfigurationCollection(typeof(SSWConfigFolderElement))] 
public class SSWConfigFolderElementCollection : ConfigurationElementCollection 
{ 
    new public SSWConfigFolderElement this[string name] 
    { 
     get { return (SSWConfigFolderElement)base.BaseGet(name); } 
    } 

    public SSWConfigFolderElement this[int index] 
    { 
     get { return (SSWConfigFolderElement)base.BaseGet(index); } 
    } 

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

    protected override object GetElementKey(ConfigurationElement element) 
    { 
     return ((SSWConfigFolderElement)element).Id; 
    } 
} 

public class SSWConfigFolderElement : ConfigurationElement 
{ 
    [ConfigurationProperty("id")] 
    public string Id 
    { 
     get { return (string)base["id"]; } 
     set { base["id"] = value; } 
    } 

    [ConfigurationProperty("enable")] 
    public bool Enable 
    { 
     get { return (string)base["enable"] == "true"; } 
     set { if (value) { base["enable"] = "true"; } else { base["enable"] = "false"; } } 
    } 

    [ConfigurationProperty("includeSubFolders")] 
    public bool IncludeSubFolders 
    { 
     get { return (string)base["includeSubFolders"] == "true"; } 
     set { if (value) { base["includeSubFolders"] = "true"; } else { base["enable"] = "false"; } } 
    } 

    [ConfigurationProperty("fromPath")] 
    public string FromPath 
    { 
     get { return (string)base["fromPath"]; } 
     set { base["fromPath"] = value; } 
    } 

    [ConfigurationProperty("wildcard")] 
    public string Wildcard 
    { 
     get { return (string)base["wildcard"]; } 
     set { base["wildcard"] = value; } 
    } 

    [ConfigurationProperty("recipientId")] 
    [StringValidator(InvalidCharacters = " [email protected]#$%^&*()[]{}/;’\"|\\", MinLength = 1, MaxLength = 256)] 
    public string RecipientId 
    { 
     get { return (string)base["recipientId"]; } 
     set { base["recipientId"] = value; } 
    } 
} 

Das Sammeln der Daten

 Configuration conf = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     SSWConfigSSWComm sc = (SSWConfigSSWComm)conf.GetSection("sswcomm"); 

     string Id = sc.Id; 
     long lngInterval = sc.ConnectionInterval; 
     string toPath = sc.ToPath; 
     SSWConfigFolderElementCollection fec = sc.sswConfigFolders; 
     foreach (SSWConfigFolderElement fe in fec) 
     { 
      string fromPath = fe.FromPath; 
      string wildcard = fe.Wildcard; 
      bool includeSubFolders = fe.IncludeSubFolders; 
      string recipientId = fe.RecipientId; 
      sp.GetFiles(Id, recipientId, fromPath, toPath, wildcard, includeSubFolders); 
     } 

Hoffentlich wird dies jemand in der Zukunft helfen.

Verwandte Themen