我在项目中创建了一个配置文件,并将其命名为MyConfig.config。它包含以下内容:
<configuration>
<MySection MyString="StringHere"/>
</configuration>
我正在尝试按如下方式访问:
AppSettingsSection settings = (AppSettingsSection)ConfigurationManager.GetSection("MySection");
string myString = settings.Settings["MyString"].Value;
显然我做错了什么。甚至可以这样使用ConfigurationManager吗?
答案 0 :(得分:3)
是的,有可能。有几个步骤。首先,您必须在配置中定义您的部分。这涉及声明部分名称和类型(您编写的类):
<configSections>
<sectionGroup name="system.web">
<section name="myConfig" type="MyConfig.MyConfigSectionHandler,MyConfig" />
</sectionGroup>
</configSections>
接下来,您必须实际编写代码来处理该部分。它必须继承自IConfigurationSectionHandler:
using System;
using System.Web;
using System.Xml;
using System.Configuration;
namespace MyConfig
{
public enum LevelSetting
{
High,
Medium,
Low,
None
}
public class MyConfigSectionHandler : IConfigurationSectionHandler
{
public virtual object Create(object parent,object configContext,XmlNode section)
{
int iLevel = 0;
string sName = "";
ConfigHelper.GetEnumValue(section, "level", typeof(LevelSetting), ref iLevel);
ConfigHelper.GetStringValue(section,"name",ref sName);
return new MyConfigSection((LevelSetting)iLevel,sName);
}
}
public class MyConfigSection
{
private LevelSetting level = LevelSetting.None;
private string name = null;
public MyConfigSection(LevelSetting _level,string _name)
{
level = _level;
name = _name;
}
public LevelSetting Level
{
get {return level;}
}
public string Name
{
get {return name;}
}
}
internal class ConfigHelper
{
public static XmlNode GetEnumValue
(XmlNode _node, string _attribute,Type _enumType, ref int _val)
{
XmlNode a = _node.Attributes.RemoveNamedItem(_attribute);
if(a==null)
throw new ConfigurationException("Attribute required: " + _attribute);
if(Enum.IsDefined(_enumType, a.Value))
_val = (int)Enum.Parse(_enumType,a.Value);
else
throw new ConfigurationException("Invalid Level",a);
return a;
}
public static XmlNode GetStringValue(XmlNode _node, string _attribute, ref string _val)
{
XmlNode a = _node.Attributes.RemoveNamedItem(_attribute);
if(a==null)
throw new ConfigurationException("Attribute required: " + _attribute);
else
_val = a.Value;
return a;
}
}
}
接下来,将实际配置项添加到web.config中:
<system.web>
<myConfig level="High" name="hello world" />
</system.web>
完成。
答案 1 :(得分:0)
您是否将配置文件复制到输出目录并重命名为YourExeFile.exe.config?据我所知,您必须将配置文件命名为app.config,或在构建后自行复制。
如果要加载配置表单备用配置文件,可以使用ConfigurationMangager.OpenMappedConfigurationFile()
方法加载该文件而不是默认配置文件。有关示例,请参阅MSDN。
如果要使用自定义用户定义的配置部分,则必须提供访问该部分的类。看看this good article即可开始使用。
答案 2 :(得分:0)
我认为你不能以这种方式使用配置文件。您是否考虑过使用.settings文件?