是否可以在运行时切换app.config?

时间:2009-01-12 19:35:35

标签: c# runtime app-config

在运行时是否有办法将应用程序app.config(current.config转换为new.config,文件转换为文件)。我有一个备份/恢复过程,需要替换自己的application.exe.config文件。我已经看过这个post,但它没有回答如何在运行时这样做。

5 个答案:

答案 0 :(得分:10)

结果我可以将.config文件交换为新文件,并为每个部分执行ConfigurationManager.RefreshSection(...)。它将从新的.config文件更新。

答案 1 :(得分:5)

Microsoft .NET的app.config不是为您的场景以及许多其他场景设计的。我经常遇到类似的需求,因此我花了很多精力设计解决方案。

  1. 重新设计仅将app.config用作配置引导程序:指定在何处查找其他实际配置数据。此信息几乎不会更改,因此无需处理文件监视或应用程序重新启动。

  2. 为实际配置数据选择一个备用位置:文件,数据库,甚至是Web服务。我大多数时候都喜欢数据库,因此我创建了一个配置表,其结构简单,允许我存储数据。

  3. 实现一个简单的库来包装您的配置访问权限,以便为应用程序的其余部分提供一个简单的API(通过依赖注入)。隐藏app.config的使用以及您的实际配置存储位置。由于.NET是强类型的,因此请进行配置设置 - 将检索到的每个字符串转换为可用的最具体类型(URL,Int32,FileInfo等)。

  4. 确定在运行时可以安全地更改哪些配置设置与不能更改的配置设置。通常,某些设置需要与其他设置一起更改,或者根本不允许它们进行更改。如果所有配置数据都可以在运行时安全地更改,那么这会让事情变得简单,但我强烈怀疑这种情况。尽可能隐藏配置设置的可变性和相互依赖性。

  5. 设计对实际配置数据不可用的响应。我更喜欢将缺少任何配置设置视为中止应用程序的致命错误,除非我可以识别可用的默认值。同样,我在没有配置存储容器(文件,数据库表等)的情况下中止。

  6. 享受,并祝福。

答案 2 :(得分:2)

当您检测到需要切换文件时,是否可以重新启动应用程序?如果是这样,只需切换文件并重新启动即可。现在,如果 .NET在程序运行时保持app.config文件打开,那么棘手的一点是。我怀疑它没有,但如果最明显的方法失败,我建议你有第二个应用程序(cfgswitcher.exe)等待进程,在命令行上指定的PID终止,然后切换配置文件并重新启动原始过程。然后你的应用程序只需要启动cfgswitcher.exe(将自己的PID作为命令行参数传递)并终止。

正如我所说,首先尝试更明显的方法是值得的。

编辑:如果您无法重新启动应用程序(或者甚至是新AppDomain中的部分应用程序),则无法更改app.config(程序集绑定等)的各个方面。如果您只对自己的配置部分更改感兴趣,那么我建议您将它们存储在单独的配置文件中,并在需要时重新加载它们。

答案 3 :(得分:0)

查看ApplicationSettingsBase类上可用的事件。有PropertyChanged& SettingChanging可以为您提供所需的东西。

您还可以观看该文件,如果已更改,请调用重新加载方法以获取新设置。

答案 4 :(得分:0)

我认为根本不可能在没有重新启动的情况下在运行时切换配置,所以如果你不能应用Jon的方法,你应该尝试提出另一种方法。

无论如何,也许只是我没有足够的关于你的场景的信息,但这种感觉很可疑。

您确定交换配置文件是实现您需要满足的任何要求的最佳方式吗?我的意思是,这是一个非常罕见的事情。如果我是你,我会尝试提出其他方法。