配置应用程序

时间:2014-08-11 11:00:21

标签: c# visual-studio configuration

我正在尝试设置应用程序配置。问题是没有任何东西是从配置中获取的。我正在使用此代码:

节数:

public class TownSection : ConfigurationSection
{
    public static TownSection.GetConfig()
    {
        return (TownSection)System.Configuration.ConfigurationManager
                .GetSection("TownSection") ?? new TownSection();
    }

    [System.Configuration.ConfigurationProperty("TownProperties")]
    [ConfigurationCollection(typeof(TownProperties), AddItemName = "TownProperty")]
    public TownProperties TownProperties
    {
        get
        {
            object o = this["TownProperties"];
            return o as TownProperties;
        }
    }        
}

实体清单:

public class TownProperties: ConfigurationElementCollection
{
    public TownProperty this[int index]
    {
        get
        {
            return base.BaseGet(index) as TownProperty ;
        }
        set
        {
            if (base.BaseGet(index) != null)
            {
                base.BaseRemoveAt(index);
            }
            this.BaseAdd(index, value);
        }
    }

    public new TownProperty this[string responseString]
    {
        get { return (TownProperty)BaseGet(responseString); }
        set
        {
            if (BaseGet(responseString) != null)
            {
                BaseRemoveAt(BaseIndexOf(BaseGet(responseString)));
            }
            BaseAdd(value);
        }
    }

    protected override System.Configuration.ConfigurationElement CreateNewElement()
    {
        return new TownProperty();
    }

    protected override object GetElementKey(System.Configuration.ConfigurationElement element)
    {
        return ((TownProperty)element).Name;
    }

}

实体:

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

    [ConfigurationProperty("Distance", IsRequired = true)]
    public string Distance
    {
        get
        {
            return this["Distance"] as string;
        }
    }
  }

在app.config中配置:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
     <sectionGroup name="TownSection">
       <section
             name="TownSection"
             type="App.Configurations.TownSection"
             allowLocation="true"
             allowDefinition="Everywhere" />
     </sectionGroup>
   </configSections>
<TownSection>
  <TownProperties>
     <TownProperty Name="A" Distance="1.8"/>
     <TownProperty Name="B" Distance="5.8"/>
  </TownProperties>
</TownSection>

代码:

        var config = TownSection.GetConfig();
        foreach(TownProperty item in config.TownProperties) /// cycle is skipped
        {
            Console.WriteLine(item.Name);
            Console.WriteLine(item.Distance);
        }

可能是什么问题?

1 个答案:

答案 0 :(得分:3)

我已经在xml中改变了一些东西并且有效。

1.删除部分组标记

2.在section标签的type属性中添加了程序集名称。格式(完整类型名称,程序集名称)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
      <section
            name="TownSection"
            type="App.Configurations.TownSection, App.Configurations"
            allowLocation="true"
            allowDefinition="Everywhere" />
  </configSections>
  <TownSection>
    <TownProperties>
      <TownProperty Name="A" Distance="1.8"/>
      <TownProperty Name="B" Distance="5.8"/>
    </TownProperties>
  </TownSection>
</configuration>