首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >App.conf自定义配置集合-无法识别的属性

App.conf自定义配置集合-无法识别的属性
EN

Stack Overflow用户
提问于 2013-02-06 00:04:41
回答 1查看 7.1K关注 0票数 3

我已经为app.config中的自定义嵌套配置集合创建了自己的一组类。我现在收到一条错误消息,显示“无法识别的属性'Name‘。请注意,属性名称区分大小写。”

下面是我的类、app.config的相关部分以及获取自定义配置的代码行:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<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>

我的代码如下:

代码语言:javascript
复制
Custom config = (Custom)ConfigurationManager.GetSection("custom");

有人能看到我的错误在哪里吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-06 00:29:52

由于我的类的编写方式,我似乎遗漏了层次结构中的一部分。更改以下内容:

代码语言:javascript
复制
[ConfigurationProperty("WatchedFolder")]
public WatchedFolderElementCollection WatchedFolder
{
   get { return this["WatchedFolder"] as WatchedFolderElementCollection; }
}

代码语言:javascript
复制
[ConfigurationProperty("WatchedFolders")]
public WatchedFolderElementCollection WatchedFolders
{
   get { return this["WatchedFolders"] as WatchedFolderElementCollection; }
}

然后修改我的app.config,使WatchedFolders元素包含在WatchedFolder元素周围,解决了这个问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14711729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档