Configuration 监视对app.config中设置的更改

Configuration 监视对app.config中设置的更改,configuration,settings,app-config,appsettings,propertychanged,Configuration,Settings,App Config,Appsettings,Propertychanged,当我使用typesafe应用程序设置时,我的app.exe.config文件中有如下内容: <setting name="IntervalTimeout" serializeAs="String"> <value>10</value> </setting> 然后实现一个Eventhandler,用于检查已更改的属性的名称并做出相应的反应 但是,PropertyChanged事件仅在对属性调用Set方法时触发,而不是在有人直接更改文件中的数

当我使用typesafe应用程序设置时,我的app.exe.config文件中有如下内容:

<setting name="IntervalTimeout" serializeAs="String">
    <value>10</value>
</setting>
然后实现一个Eventhandler,用于检查已更改的属性的名称并做出相应的反应

但是,PropertyChanged事件仅在对属性调用Set方法时触发,而不是在有人直接更改文件中的数据时触发。当然,这会是天堂,但可以理解的是,这不是它的工作方式

最可能的情况是,我会实现一个filesystemwatcher来监视对文件的更改,然后重新加载配置,找出更改的内容,然后执行任何必要的操作来反映这些更改


有人知道更好的方法吗?甚至是受支持的?

ASP.NET会监视Web.config文件的更改。它使用System.Web.FileChangesMonitor类(标记为internal并密封)完成此操作,该类使用另一个内部类System.Web.FileMonitor。在反射器中查看它们。对于您的问题来说,它可能太复杂了,但如果我有类似的要求,我肯定会研究它

这看起来很复杂。请记住,ASP.NET在检测到更改后会关闭旧应用程序并启动新应用程序。App.config的体系结构不适合在应用程序运行时检测更改。也许重新考虑一下你为什么需要这个

一种更简单的方法是在进行更改后重新启动服务

<Global.System.Configuration.ApplicationScopedSettingAttribute(),  _
 Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
 Global.System.Configuration.DefaultSettingValueAttribute("10")>  _
Public ReadOnly Property IntervalTimeout() As Integer
    Get
        Return CType(Me("IntervalTimeout"),Integer)
    End Get
End Property
AddHandler Settings.PropertyChanged, New PropertyChangedEventHandler(AddressOf Settings_PropertyChanged)