C# 阅读配置部分
我正在编写一个Windows服务,它需要app.config中的一些信息-我知道我可以使用C# 阅读配置部分,c#,service,config,app-config,C#,Service,Config,App Config,我正在编写一个Windows服务,它需要app.config中的一些信息-我知道我可以使用AppSettings,但我正试图更好地理解配置部分 我已经修改了我的App.Config: <configuration> <startup> <supportedRuntime sku=".NETFramework,Version=v4.0" version="v4.0"/> </startup>
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 MyConfigurationSection ConfigSection
{
get
{
var configurationSection = Configuration.GetSection("config");
return (MyConfigurationSection) configurationSection;
}
}
private static Configuration Configuration
{
get { return ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); }
}
Console.WriteLine("Number: " + MyConfigurationSection.Current.Number);
Console.WriteLine("Boolean: " + MyConfigurationSection.Current.Boolean);
Console.ReadLine();
在我进入(MyConfigurationSection)配置部分之前,一切正常。调用GetSection()
,我将返回一个DefaultSection
,但强制转换失败
我哪里迷路了?可能,虽然没有检查
type="MyNamespace.MyConfigurationSection"/>
应该是
type="<Namespace.ClassName>,<Namespace>"/>
type=“,”/>
可能,尽管没有检查
type="MyNamespace.MyConfigurationSection"/>
应该是
type="<Namespace.ClassName>,<Namespace>"/>
type=“,”/>
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>
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>
这里的问题是,您必须在app.config中的节配置中将类型值用作“Namespace.ClassName,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>
这里的关键是,您必须在app.config中的节配置中将类型值用作“Namespace.ClassName,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>
难道你想不出一个比“config”更好的名称来命名configsection吗?这是一个模型。我也不是真的用“aBoolean”和“aNumber”。你能想出一个比“config”更好的名称吗?这是一个模型。我也不是真的用“aBoolean”和“aNumber”,这两点你都是对的。重新安排了内容并更改了“type”属性,它就像一个符咒。干得好,伙计。你在两个方面都是对的。重新安排了内容并更改了“type”属性,它就像一个符咒。干得好,伙计。这是问题的一部分,但我还需要按照标记的答案重新排列app.config。这是问题的一部分,但我还需要按照标记的答案重新排列app.config。