App.config - custom section not working
我最近开始构建Web应用程序的控制台版本。我从web.config中复制了自定义分区。到我的app.config。当我转到获取配置信息时,我会收到此错误:
为x/y创建配置节处理程序时出错:无法从程序集"system.configuration"加载类型"x"。
它不喜欢的线条是:
将configurationmanager.getsection("x/y")返回为z;
有人碰到这样的东西吗?
我可以补充
1 |
在AppSettings中读取。
添加:
我确实对自定义部分进行了定义:
1 2 3 4 5 6 | <configSections> <sectionGroup name="x"> <section name="y" type="zzzzz"/> </sectionGroup> </configSections> |
我最近也有同样的问题。我为一个Web应用程序创建了一个自定义的sectiongroup(运行得很好),但是当我将这个层移植到一个控制台应用程序时,sectiongroup失败了。
在您的问题中,关于您的部分定义中需要多少"类型"是正确的。我用下面的示例修改了您的配置部分:
1 2 3 4 5 6 7 | <configSection> <section name="yourClassName" type="your.namespace.className, your.assembly" allowLocation="true" allowDefinition="Everywhere" /> </configSection> |
您会注意到,类型现在有类名和程序集名。这是在Web环境之外进行交互所必需的。
注意:程序集名称不一定等于您的命名空间(对于给定的节)。
听起来您的配置节处理程序没有定义
1 2 3 4 5 6 7 8 | <configSection> <section name="YOUR_CLASS_NAME_HERE" type="YOUR.NAMESPACE.CLASSNAME, YOUR.NAMESPACE, Version=1.1.0.0, Culture=neutral, PublicKeyToken=PUBLIC_TOKEN_ID_FROM_ASSEMBLY" allowLocation="true" allowDefinition="Everywhere" /> </configSection> |
此类用作任何类型的常规自定义配置节处理程序…
1 2 3 4 5 6 7 8 9 10 | public class XmlConfigurator : IConfigurationSectionHandler { public object Create(object parent, object configContext, XmlNode section) { if (section == null) return null; Type sectionType = Type.GetType((string)(section.CreateNavigator()).Evaluate("string(@configType)")); XmlSerializer xs = new XmlSerializer(sectionType); return xs.Deserialize(new XmlNodeReader(section)); } } |
在app.config中,添加
1 | <section name="NameofConfigSection" type="NameSpace.XmlConfigurator, NameSpace.Assembly"/> |
在configuration部分元素中,添加一个属性来指定要将根元素反序列化为的类型。
1 2 3 4 5 6 7 | <?xml version="1.0" encoding="utf-8" ?> <NameofConfigSection configType="NameSpace.NameofTypeToDeserializeInto, Namespace.Assembly"> ... </NameofConfigSection> |
在文件的顶部,您需要在节内具有configSection标记。
您也可以使用sectiongroup。例子:
1 2 3 4 5 6 7 | <configuration> <configSections> <sectionGroup name="x"> <section name="y" type="a, b"/> </sectionGroup> <configSections> </configuration> |
如果需要自定义配置处理程序,则必须定义类并引用它,如StevenLowe所示。您可以从预定义的处理程序继承,也可以只使用AppSetting部分中提供的值/键对,如您所指出的。