我正在编写一个Windows,它需要从app.config获得一些信息--我知道我可以使用AppSettings,但我正在尝试更好地理解配置部分。
我修改了我的App.Config:
<configuration>
<startup>
<supportedRuntime sku=".NETFramework,Version=v4.0"
version="v4.0"/>
</startup>
<configSections>
<section name="config"
type="MyNamespace.MyConfigurationSection"/>
</configSections>
<config aNumber="1"
aBoolean="false"/>
</configuration>并创建了以下类:
public sealed class MyConfigurationSection : ConfigurationSection
{
[ConfigurationProperty("aNumber", DefaultValue = 1, IsRequired = false)]
public int Number
{
get { return (int) this["aNumber"]; }
set { this["aNumber"] = value; }
}
[ConfigurationProperty("aBoolean", DefaultValue = false, IsRequired = false)]
public bool Boolean
{
get { return (bool) this["aBoolean"]; }
set { this["aBoolean"] = value; }
}
}我试着像这样访问它:
public MyConfigurationSection ConfigSection
{
get
{
var configurationSection = Configuration.GetSection("config");
return (MyConfigurationSection) configurationSection;
}
}
private static Configuration Configuration
{
get { return ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); }
}在我到达(MyConfigurationSection) configurationSection演员之前,一切都很好。我要从我打给GetSection()的电话中得到一个GetSection(),而这个转换失败了。
我到哪里去了?
发布于 2016-12-08 00:13:37
这里的问题是,您必须在app.config中的部分配置中使用类型值作为“app.config,Namespace”,更重要的是,configSections必须是app.config中根配置元素的第一个子元素。
下面的配置可能适用于您:
<configuration>
<!-- <configSections> is moved to first child of <configuration> -->
<configSections>
<section name="config"
type="MyNamespace.MyConfigurationSection, MyNamespace"/>
</configSections>
<config aNumber="1"
aBoolean="false"/>
<startup>
<supportedRuntime sku=".NETFramework,Version=v4.0"
version="v4.0"/>
</startup>
</configuration>发布于 2016-12-07 22:59:51
可能吧,尽管没有检查,
type="MyNamespace.MyConfigurationSection"/>应该是
type="<Namespace.ClassName>,<Namespace>"/>发布于 2016-12-07 23:21:12
config是一个保留字,不能用于配置节的名称。您也不应该给变量命名布尔值。
尝试以下示例:
using System.Configuration;
namespace ConfigSectionSample
{
internal class MyConfigurationSection : ConfigurationSection
{
public static MyConfigurationSection Current
{
get
{
return (MyConfigurationSection)ConfigurationManager.GetSection("myConfig");
}
}
[ConfigurationProperty("aNumber", IsRequired = true)]
public int Number
{
get
{
return (int)this["aNumber"];
}
}
[ConfigurationProperty("aBoolean", IsRequired = true)]
public bool Boolean
{
get
{
return (bool)this["aBoolean"];
}
}
}
}使用下面的应用程序,配置
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="myConfig" type="ConfigSectionSample.MyConfigurationSection, ConfigSectionSample"></section>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<myConfig aNumber="1" aBoolean="false" />
</configuration>得到这样的值:
Console.WriteLine("Number: " + MyConfigurationSection.Current.Number);
Console.WriteLine("Boolean: " + MyConfigurationSection.Current.Boolean);
Console.ReadLine();https://stackoverflow.com/questions/41028645
复制相似问题