I'm creating configSections in app.config with my custom handler AbraMain.MyConfigHandler
Error:
Could not load type 'AbraMain.MyConfigHandler.ApplicationListCollection' from assembly 'System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.":"AbraMain.MyConfigHandler.ApplicationListCollection"
<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>
Namespace 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
It seems that the problem is in the app.config
on the line where you specify the handler for your custom section:
<section name="applicationList" type ="AbraMain.MyConfigHandler.ApplicationListCollection"/>
The type declaration for your custom handler type also needs to include the assembly in which it can be found. Otherwise, it will try to find it in the default System.Configuration
assembly. That is also what the error message that you got said.
So you can solve it by including the name of your assembly as well. I am assuming your assembly is named AbraMain
. Then you need to change that line to:
<section name="applicationList" type ="AbraMain.MyConfigHandler.ApplicationListCollection, AbraMain"/>
However, you seem to have a second problem. For a configuration section, you need to have a handler that implements ConfigurationSection
.
So you need to add a new class to do that:
Public Class ApplicationList
Inherits ConfigurationSection
' You need to do the implementation. There are plenty of
' examples available on-line.
End Class
And then point your app.config
to use it:
<section name="applicationList" type ="AbraMain.MyConfigHandler.ApplicationList, AbraMain"/>