自定义配置部分处理程序找不到处理程序
Custom config section handler can't find handler
我正在使用我的自定义处理程序 AbraMain.MyConfigHandler
在 app.config 中创建 configSections
错误:
无法从程序集 'System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 加载类型 'AbraMain.MyConfigHandler.ApplicationListCollection'。":"AbraMain.MyConfigHandler.ApplicationListCollection"
app.config
<configuration>
<configSections>
<section name="applicationList" type ="AbraMain.MyConfigHandler.ApplicationListCollection"/>
</configSections>
<applicationList>
<add name="Abra Backup" index="0" iconIndex="0" desc="AbraBackup"/>
<add name="Abra Backup" index="0" iconIndex="0" desc="AbraBackup"/>
</applicationList>
</configuration>
MyConfigHandler.vb
命名空间 MyConfigHandler
'Desc : Individual Application configuration Class
'Handle Tag : App.config -> <applicationList> -> <add>
Public Class ApplInfoConfig
Inherits ConfigurationElement
<ConfigurationProperty("name", IsRequired:=True)> _
Public Property name() As String
Get
Return CStr(Me("name"))
End Get
Set(ByVal value As String)
Me("name") = value
End Set
End Property
<ConfigurationProperty("desc", DefaultValue:="", IsRequired:=False)> _
Public Property desc() As String
Get
Return CStr(Me("desc"))
End Get
Set(ByVal value As String)
Me("desc") = value
End Set
End Property
<ConfigurationProperty("subPath", DefaultValue:="", IsRequired:=False)> _
Public Property subPath() As String
Get
Return CStr(Me("subPath"))
End Get
Set(ByVal value As String)
Me("subPath") = value
End Set
End Property
<ConfigurationProperty("index", IsRequired:=True)> _
Public Property index() As Integer
Get
Return Me("index")
End Get
Set(ByVal value As Integer)
Me("index") = value
End Set
End Property
<ConfigurationProperty("iconIndex", DefaultValue:="0", IsRequired:=False)> _
Public Property iconIndex() As Integer
Get
Return Me("iconIndex")
End Get
Set(ByVal value As Integer)
Me("iconIndex") = value
End Set
End Property
End Class
'Desc : Collection of Individual Application configuration Class
'Handle Tag : App.config -> <applicationList>
Public Class ApplicationListCollection
Inherits ConfigurationElementCollection
Protected Overloads Overrides Function CreateNewElement() As System.Configuration.ConfigurationElement
Return New ApplInfoConfig()
End Function
Protected Overrides Function GetElementKey(ByVal element As System.Configuration.ConfigurationElement) As Object
Return CType(element, ApplInfoConfig).name()
End Function
End Class
End Namespace
问题似乎出在您为自定义部分指定处理程序的那一行 app.config
中:
<section name="applicationList" type ="AbraMain.MyConfigHandler.ApplicationListCollection"/>
您的自定义处理程序类型的类型声明还需要包括可以在其中找到它的 程序集。否则,它将尝试在默认的 System.Configuration
程序集中找到它。这也是您所说的错误消息。
因此您也可以通过包含程序集的名称来解决它。我假设您的程序集被命名为 AbraMain
。然后您需要将该行更改为:
<section name="applicationList" type ="AbraMain.MyConfigHandler.ApplicationListCollection, AbraMain"/>
不过,你好像还有第二个问题。对于配置 部分 ,您需要有一个实现 ConfigurationSection
.
的处理程序
因此您需要添加一个新的 class 来做到这一点:
Public Class ApplicationList
Inherits ConfigurationSection
' You need to do the implementation. There are plenty of
' examples available on-line.
End Class
然后指向您的 app.config
以使用它:
<section name="applicationList" type ="AbraMain.MyConfigHandler.ApplicationList, AbraMain"/>
我正在使用我的自定义处理程序 AbraMain.MyConfigHandler
在 app.config 中创建 configSections错误:
无法从程序集 'System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 加载类型 'AbraMain.MyConfigHandler.ApplicationListCollection'。":"AbraMain.MyConfigHandler.ApplicationListCollection"
app.config
<configuration>
<configSections>
<section name="applicationList" type ="AbraMain.MyConfigHandler.ApplicationListCollection"/>
</configSections>
<applicationList>
<add name="Abra Backup" index="0" iconIndex="0" desc="AbraBackup"/>
<add name="Abra Backup" index="0" iconIndex="0" desc="AbraBackup"/>
</applicationList>
</configuration>
MyConfigHandler.vb
命名空间 MyConfigHandler
'Desc : Individual Application configuration Class
'Handle Tag : App.config -> <applicationList> -> <add>
Public Class ApplInfoConfig
Inherits ConfigurationElement
<ConfigurationProperty("name", IsRequired:=True)> _
Public Property name() As String
Get
Return CStr(Me("name"))
End Get
Set(ByVal value As String)
Me("name") = value
End Set
End Property
<ConfigurationProperty("desc", DefaultValue:="", IsRequired:=False)> _
Public Property desc() As String
Get
Return CStr(Me("desc"))
End Get
Set(ByVal value As String)
Me("desc") = value
End Set
End Property
<ConfigurationProperty("subPath", DefaultValue:="", IsRequired:=False)> _
Public Property subPath() As String
Get
Return CStr(Me("subPath"))
End Get
Set(ByVal value As String)
Me("subPath") = value
End Set
End Property
<ConfigurationProperty("index", IsRequired:=True)> _
Public Property index() As Integer
Get
Return Me("index")
End Get
Set(ByVal value As Integer)
Me("index") = value
End Set
End Property
<ConfigurationProperty("iconIndex", DefaultValue:="0", IsRequired:=False)> _
Public Property iconIndex() As Integer
Get
Return Me("iconIndex")
End Get
Set(ByVal value As Integer)
Me("iconIndex") = value
End Set
End Property
End Class
'Desc : Collection of Individual Application configuration Class
'Handle Tag : App.config -> <applicationList>
Public Class ApplicationListCollection
Inherits ConfigurationElementCollection
Protected Overloads Overrides Function CreateNewElement() As System.Configuration.ConfigurationElement
Return New ApplInfoConfig()
End Function
Protected Overrides Function GetElementKey(ByVal element As System.Configuration.ConfigurationElement) As Object
Return CType(element, ApplInfoConfig).name()
End Function
End Class
End Namespace
问题似乎出在您为自定义部分指定处理程序的那一行 app.config
中:
<section name="applicationList" type ="AbraMain.MyConfigHandler.ApplicationListCollection"/>
您的自定义处理程序类型的类型声明还需要包括可以在其中找到它的 程序集。否则,它将尝试在默认的 System.Configuration
程序集中找到它。这也是您所说的错误消息。
因此您也可以通过包含程序集的名称来解决它。我假设您的程序集被命名为 AbraMain
。然后您需要将该行更改为:
<section name="applicationList" type ="AbraMain.MyConfigHandler.ApplicationListCollection, AbraMain"/>
不过,你好像还有第二个问题。对于配置 部分 ,您需要有一个实现 ConfigurationSection
.
因此您需要添加一个新的 class 来做到这一点:
Public Class ApplicationList
Inherits ConfigurationSection
' You need to do the implementation. There are plenty of
' examples available on-line.
End Class
然后指向您的 app.config
以使用它:
<section name="applicationList" type ="AbraMain.MyConfigHandler.ApplicationList, AbraMain"/>