2009-01-12 37 views
8

有没有办法在运行时切换出应用程序app.config(current.config为new.config,文件为文件)。我有一个备份/恢复过程,需要替换它自己的application.exe.config文件。我已经看到这个post,但它不回答如何在运行时执行此操作。是否可以在运行时切换app.config?

回答

10

原来,我可以交换新的.config文件,并为每个部分做一个ConfigurationManager.RefreshSection(...)。它将从新的.config文件更新。

2

您是否能够重新启动应用程序时,你检测出你需要切换文件?如果是这样,这只是一个切换文件并重新启动的问题。现在,棘手的位是if .NET在程序运行时保持app.config文件处于打开状态。我怀疑它不会,但如果最明显的方法失败了,我建议你有第二个应用程序(cfgswitcher.exe)等待命令行中指定的PID终止进程,然后切换配置文件并重新启动原始过程。然后你的应用程序只需要启动cfgswitcher.exe(传入自己的PID作为命令行参数)并终止。

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

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

+0

我无法重新启动应用程序。 – maxfridbe 2009-01-12 19:44:48

0

只看该ApplicationSettingsBase类提供给您的事件。有PropertyChanged & SettingChanging可能会给你你所需要的。

你也可以看文件,如果它已经改变了调用重载方法来获取新的设置。

0

我不认为完全可以在运行时切换配置而不重新启动,所以如果你不能应用Jon的方法,你应该试着想出另一种方法。

无论如何,也许它只是我没有你的情况下足够的信息,但这种感觉腥。

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

5

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

  1. 重新设计使用app.config只能作为配置引导:指定在哪里可以找到真实结构数据的其余部分。这些信息几乎不会改变,所以不需要处理文件监视或应用程序重新启动。

  2. 为实际配置数据选择一个替代位置:文件,数据库,甚至可能是Web服务。大多数情况下我更喜欢数据库,所以我创建了一个具有简单结构的配置表,允许我存储数据。

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

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

  5. 设计对实际配置数据不可用的响应。除非我能确定可用的默认值,否则我宁愿将缺少任何配置设置视为中止应用程序的致命错误。同样,我在没有配置存储容器(文件,数据库表等)的情况下放弃。

享受和祝福。

相关问题