1
從多種來源(包括stackOverlflow)花絮,但是當我來使用它,我得到以下錯誤消息實現自定義配置節處理程序
「的配置屬性‘DeviceConfig軟件’可以不被自ConfigurationSection衍生「。
我一直在爲這一天的大部分時間而苦苦掙扎,而且我也沒有接近解決方案,所以對此事的任何幫助都將不勝感激。我在實現自定義配置部分是新手,所以請溫柔地對待我:-)
App.config文件看起來是這樣的:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="deviceconfig" type="CNIMonitor.Core.CustomConfig.DeviceConfig,Core"/>
</configSections>
<system.diagnostics>
<sources>
<!-- This section defines the logging configuration for My.Application.Log -->
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="FileLog"/>
<!-- Uncomment the below section to write to the Application Event Log -->
<!--<add name="EventLog"/>-->
</listeners>
</source>
</sources>
<switches>
<add name="DefaultSwitch" value="Information" />
</switches>
<sharedListeners>
<add name="FileLog"
type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
initializeData="FileLogWriter"/>
<!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log -->
<!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
</sharedListeners>
</system.diagnostics>
<deviceconfig>
<devices>
<device deviceid = "1"
name = "localhost"
ipaddress="127.0.0.1"
port="10000"
status="not listening"
message="no message"
/>
<device deviceid ="2"
name ="2nd localhost"
ipaddress="127.0.0.1"
port="20000"
status="not listening"
message="no message"
/>
</devices>
</deviceconfig>
自定義節處理程序代碼如下:
Imports System.Configuration
命名空間CNIMonitor.Core.CustomConfig
Public Class DeviceConfig
Inherits ConfigurationSection
<ConfigurationProperty("deviceconfig")> _
Public ReadOnly Property DeviceConfig() As DeviceConfig
Get
Return CType(MyBase.Item("deviceconfig"), DeviceConfig)
End Get
End Property
End Class
<ConfigurationCollectionAttribute(GetType(Device))> _
Public Class Devices
Inherits ConfigurationElementCollection
Protected Overrides Function CreateNewElement() As ConfigurationElement
Return New Device
End Function
Protected Overrides Function GetElementKey _
(ByVal element As ConfigurationElement) As Object
Return CType(element, Device).DeviceID
End Function
Public Sub Add(ByVal element As Device)
Me.BaseAdd(element)
End Sub
End Class
Public Class Device
Inherits ConfigurationElement
<ConfigurationProperty("deviceid", DefaultValue:="", IsKey:=True, IsRequired:=True)> _
Public Property DeviceID() As String
Get
Return CType(MyBase.Item("deviceid"), String)
End Get
Set(ByVal value As String)
MyBase.Item("deviceid") = value
End Set
End Property
<ConfigurationProperty("hostname", DefaultValue:="", IsKey:=True, IsRequired:=False)> _
Public Property HostName() As String
Get
Return CType(MyBase.Item("RegisteredDate"), String)
End Get
Set(ByVal value As String)
MyBase.Item("RegisteredDate") = value
End Set
End Property
<ConfigurationProperty("ipaddress", DefaultValue:="", IsKey:=True, IsRequired:=False)> _
Public Property IpAddress() As String
Get
Return CType(MyBase.Item("ipaddress"), String)
End Get
Set(ByVal value As String)
MyBase.Item("ipaddress") = value
End Set
End Property
<ConfigurationProperty("port", DefaultValue:="", IsKey:=True, IsRequired:=False)> _
Public Property Port() As String
Get
Return CType(MyBase.Item("port"), String)
End Get
Set(ByVal value As String)
MyBase.Item("port") = value
End Set
End Property
<ConfigurationProperty("status", DefaultValue:="", IsKey:=False, IsRequired:=False)> _
Public Property Status() As String
Get
Return CType(MyBase.Item("status"), String)
End Get
Set(ByVal value As String)
MyBase.Item("status") = value
End Set
End Property
<ConfigurationProperty("message", DefaultValue:="", IsKey:=False, IsRequired:=False)> _
Public Property Message() As String
Get
Return CType(MyBase.Item("message"), String)
End Get
Set(ByVal value As String)
MyBase.Item("message") = value
End Set
End Property
End Class
End Namespace
AJ感謝您的repsonse,已經改變了我的代碼按你的建議,現在該代碼編譯,但我在一個不知如何使用來自應用程序內的部分處理程序。你有什麼建議嗎?我需要找到一個方法來遍歷配置文件中指定的元素集合。 – 2010-11-03 10:11:10
查看我的使用更新。 – 2010-11-03 15:29:28
有點深入的調查得到它的工作 – 2010-11-03 16:57:01