2016-06-28 4 views
1

設定用の設定ファイルを読み込む必要があるアプリケーションを作成しています。ConfigurationManagerは即座にTypeInitializationExceptionを返します

私はそうのようなApp_configファイルの設定定義しました:今、私はSSWConfigとプットを呼び出すたび

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

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

そしてそうのようなC#のコードをそれは変数で、私はすぐにTypeInitializationExceptionの例外を取得します。 部分がnullを返すと思います。これはApp.configファイルで間違いを犯したためですか?

ネストされた要素を持つapp.configは私には新しいものなので、間違って定義している可能性があります。

答えて

0

私のソリューションを投稿するだけです。

明らかに私はそれが実際よりも難しくなっていたようです。私は一から始めましたが、いくつかの変更の後に私の設定が読み込まれます。

私が持っていたもう1つのエラーは、構成ファイル(oops)を実際に読んだことがなく、Configurationクラスを呼び出すときに自動的に発生すると考えたことです。

クラス:

// <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; } 
    } 
} 

収集データ

 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); 
     } 

がうまくいけば、これは将来的に誰かを助けます。

関連する問題