5

我们都知道修改 .NET Web 应用程序的 web.config 文件会重新启动应用程序并使其读取更新的配置。您如何使用控制台或 WinForms 应用程序做到这一点?谢谢 :)

4

7 回答 7

6

可能需要一个 FileSystemWatcher 来监视文件,并处理相关事件。System.Configuration.ConfigManager 类可能具有重新加载的相关方法(方法调用等)。我面前没有VS,但我想说肯定有一些钩子。

于 2009-01-22T10:13:30.223 回答
5

使用 FileSystemWatcher 在您的配置文件更改时收到通知。

使用ConfigurationManager.RefreshSection 从磁盘刷新它,而无需重新启动您的应用程序。

于 2009-01-27T12:59:39.390 回答
2

这里有一个关于实际重新加载数据的好部分。将它与 DarkwingDuck 建议的 FileSystemWatcher 结合起来,您很可能会成为赢家。

于 2009-01-27T12:27:48.550 回答
2

创建一个FileSystemWatcher并监听配置文件的变化。
触发时,使用以下代码:

MyGeneratedSettingsFile.Default.Reload();
于 2009-01-27T12:32:12.643 回答
1

log4net 可以选择检测 *.config 文件的外部更改。正如其他人已经说过的那样,这是通过使用设置为侦听 *.config 文件更改的 FileSystemWatcher 来完成的。

底线;FileSystemWatcher 是要走的路。

于 2009-01-27T12:40:25.950 回答
1

不过,简单地重新加载配置文件有更广泛的含义,这就是应用程序的其余部分应该对此做出反应的方式。

例如,您可以在从配置中读取要与 SQL Server 对话并获取它的连接字符串后,为 SQL Server 配置数据库上下文层。

但是,如果用户随后更改并指定 Oracle 数据库怎么办?仅仅重新加载配置文件是不够的,您需要能够告诉应用程序的其余部分也发生了一些变化。

我想说你应该抽象出一个新类中的配置部分,它有事件。一旦你决定重新加载配置,这个类应该在内部找出哪些设置发生了变化并触发适当的事件。

如果您使用的是 IoC 容器,由于新设置,您可能需要重新连接它的一些依赖项。

这样,依赖于配置的应用程序的零碎部分,无论出于何种原因,可能会在给定的时间间隔内在本地缓存配置设置,这将需要挂钩相关事件并响应它们的触发。

至于实际检测和重新加载配置文件本身,其他答案似乎已经涵盖了这一点,所以我不会在这里重复。

于 2009-01-27T12:40:57.073 回答
0

如果您使用的是 .NET Framework 2 并且您使用的是用户范围设置,那么它是非常透明的。更改设置后,只需调用 Save() 方法,新设置立即可用

例如

My.Settings.UpdateInterval = 10
My.Settings.Save()

如果设置是应用程序范围,那么 FileSystemWatcher 可能是要走的路

于 2009-01-27T12:43:06.990 回答