我们都知道修改 .NET Web 应用程序的 web.config 文件会重新启动应用程序并使其读取更新的配置。您如何使用控制台或 WinForms 应用程序做到这一点?谢谢 :)
7 回答
可能需要一个 FileSystemWatcher 来监视文件,并处理相关事件。System.Configuration.ConfigManager 类可能具有重新加载的相关方法(方法调用等)。我面前没有VS,但我想说肯定有一些钩子。
使用 FileSystemWatcher 在您的配置文件更改时收到通知。
使用ConfigurationManager.RefreshSection 从磁盘刷新它,而无需重新启动您的应用程序。
这里有一个关于实际重新加载数据的好部分。将它与 DarkwingDuck 建议的 FileSystemWatcher 结合起来,您很可能会成为赢家。
创建一个FileSystemWatcher并监听配置文件的变化。
触发时,使用以下代码:
MyGeneratedSettingsFile.Default.Reload();
log4net 可以选择检测 *.config 文件的外部更改。正如其他人已经说过的那样,这是通过使用设置为侦听 *.config 文件更改的 FileSystemWatcher 来完成的。
底线;FileSystemWatcher 是要走的路。
不过,简单地重新加载配置文件有更广泛的含义,这就是应用程序的其余部分应该对此做出反应的方式。
例如,您可以在从配置中读取要与 SQL Server 对话并获取它的连接字符串后,为 SQL Server 配置数据库上下文层。
但是,如果用户随后更改并指定 Oracle 数据库怎么办?仅仅重新加载配置文件是不够的,您需要能够告诉应用程序的其余部分也发生了一些变化。
我想说你应该抽象出一个新类中的配置部分,它有事件。一旦你决定重新加载配置,这个类应该在内部找出哪些设置发生了变化并触发适当的事件。
如果您使用的是 IoC 容器,由于新设置,您可能需要重新连接它的一些依赖项。
这样,依赖于配置的应用程序的零碎部分,无论出于何种原因,可能会在给定的时间间隔内在本地缓存配置设置,这将需要挂钩相关事件并响应它们的触发。
至于实际检测和重新加载配置文件本身,其他答案似乎已经涵盖了这一点,所以我不会在这里重复。
如果您使用的是 .NET Framework 2 并且您使用的是用户范围设置,那么它是非常透明的。更改设置后,只需调用 Save() 方法,新设置立即可用
例如
My.Settings.UpdateInterval = 10
My.Settings.Save()
如果设置是应用程序范围,那么 FileSystemWatcher 可能是要走的路