vb.netconfigurationconfigsection

Custom config section handler can't find handler


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"

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

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

Solution

  • 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"/>