2013-02-05 48 views
2

我已經爲app.config中的自定義嵌套配置集合創建了自己的一組類。我現在收到一個錯誤,指出「無法識別的屬性名稱」,請注意,屬性名稱區分大小寫。「App.conf自定義配置集合 - 無法識別的屬性

下面是我的班,我的app.config的相關部分和代碼行以獲取自定義配置:

public class Custom : ConfigurationSection 
{ 
    [ConfigurationProperty("AutoSyncConfiguration")] 
    public BackupLocationElementCollection AutoSyncConfiguration 
    { 
     get { return this["AutoSyncConfiguration"] as BackupLocationElementCollection; } 
    } 
} 
public class BackupLocationElementCollection : ConfigurationElementCollection 
{ 
    protected override ConfigurationElement CreateNewElement() 
    { 
     return new BackupLocationElement(); 
    } 
    protected override object GetElementKey(ConfigurationElement element) 
    { 
     return ((BackupLocationElement)element).Name; 
    } 
    public override ConfigurationElementCollectionType CollectionType 
    { 
     get { return ConfigurationElementCollectionType.BasicMap; } 
    } 
    protected override string ElementName 
    { 
     get { return "BackupLocation"; } 
    } 
    public BackupLocationElement this[int index] 
    { 
     get { return (BackupLocationElement)BaseGet(index); } 
     set 
     { 
     if (BaseGet(index) != null) 
     { 
      BaseRemoveAt(index); 
     } 
     BaseAdd(index, value); 
     } 
    } 
    new public BackupLocationElement this[string backupName] 
    { 
     get { return (BackupLocationElement)BaseGet(backupName); } 
    } 
    public bool ContainsKey(string key) 
    { 
     bool result = false; 
     object[] keys = BaseGetAllKeys(); 
     foreach (object obj in keys) 
     { 
     if ((string)obj == key) 
     { 
      result = true; 
      break; 
     } 
     } 
     return result; 
    } 
} 

public class BackupLocationElement : ConfigurationElement 
{ 
    [ConfigurationProperty("Name", IsRequired = true, IsKey = true)] 
    public string Name 
    { 
     get { return this["Name"] as string; } 
     set { this["Name"] = value; } 
    } 

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

    [ConfigurationProperty("WatchedFolder")] 
    public WatchedFolderElementCollection WatchedFolder 
    { 
     get { return this["WatchedFolder"] as WatchedFolderElementCollection; } 
    } 
} 

public class WatchedFolderElementCollection : ConfigurationElementCollection 
{ 
    protected override ConfigurationElement CreateNewElement() 
    { 
     return new WatchedFolderElement(); 
    } 
    protected override object GetElementKey(ConfigurationElement element) 
    { 
     return ((WatchedFolderElement)element).Name; 
    } 
    public override ConfigurationElementCollectionType CollectionType 
    { 
     get { return ConfigurationElementCollectionType.BasicMap; } 
    } 
    protected override string ElementName 
    { 
     get { return "WatchedFolder"; } 
    } 
    public WatchedFolderElement this[int index] 
    { 
     get { return (WatchedFolderElement)BaseGet(index); } 
     set 
     { 
     if (BaseGet(index) != null) 
     { 
      BaseRemoveAt(index); 
     } 
     BaseAdd(index, value); 
     } 
    } 
    new public WatchedFolderElement this[string folderName] 
    { 
     get { return (WatchedFolderElement)BaseGet(folderName); } 
    } 
    public bool ContainsKey(string key) 
    { 
     bool result = false; 
     object[] keys = BaseGetAllKeys(); 
     foreach (object obj in keys) 
     { 
     if ((string)obj == key) 
     { 
      result = true; 
      break; 
     } 
     } 
     return result; 
    } 
} 

public class WatchedFolderElement : ConfigurationElement 
{ 
    [ConfigurationProperty("Name", IsRequired = true, IsKey = true)] 
    public string Name 
    { 
     get { return this["Name"] as string; } 
     set { this["Name"] = value; } 
    } 

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

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

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

以下是我的app.config:

<configuration> 
    <configSections> 
    <section name="custom" type="AutoSync.Custom, AutoSync" /> 
    </configSections> 

    <custom> 
    <AutoSyncConfiguration> 
     <BackupLocation Name="S3" Details="AccessKey=asdf;SecretKey=asdf;BucketName=asdf"> 
     <WatchedFolder Name="test1" LocalFolder="C" RemoteFolder="Z" FileSpec="*"/> 
     </BackupLocation> 
     <BackupLocation Name="External" Details="MappedDrive=X;"> 
     <WatchedFolder Name="test" LocalFolder="D" RemoteFolder="XPhotos" FileSpec="*.jpeg" /> 
     </BackupLocation> 
    </AutoSyncConfiguration> 
    </custom> 
</configuration> 

我的代碼如下:

Custom config = (Custom)ConfigurationManager.GetSection("custom"); 

任何人都可以看到我的錯誤在哪裏?

回答

2

看來,隨着我的課程的寫作方式,我遺漏了一個層次。更改如下:

[ConfigurationProperty("WatchedFolder")] 
public WatchedFolderElementCollection WatchedFolder 
{ 
    get { return this["WatchedFolder"] as WatchedFolderElementCollection; } 
} 

[ConfigurationProperty("WatchedFolders")] 
public WatchedFolderElementCollection WatchedFolders 
{ 
    get { return this["WatchedFolders"] as WatchedFolderElementCollection; } 
} 

然後修改我的app.config有圍繞WatchedFolder元素WatchedFolders元素固定的問題。