在运行时,是否有一种方法可以切换应用程序的app.config(从current.config到new.config,文件对文件)。我有一个备份/恢复过程,需要替换自己的application.exe.config文件。我看到了这篇文章,但它没有回答如何在运行时完成此操作。
在运行时,是否有一种方法可以切换应用程序的app.config(从current.config到new.config,文件对文件)。我有一个备份/恢复过程,需要替换自己的application.exe.config文件。我看到了这篇文章,但它没有回答如何在运行时完成此操作。
结果发现我可以将新的 .config 文件替换掉旧的,然后对每个部分使用 ConfigurationManager.RefreshSection(...)。这样它就会从新的 .config 文件进行更新。
Microsoft .NET的app.config
并不适用于您的场景,也不适用于许多其他场景。我经常遇到类似的需求,因此我花了很大努力设计了一种解决方案。
重新设计只使用app.config
作为配置引导:指定其余真实配置数据的位置。这些信息几乎永远不会改变,因此无需处理文件监视或应用程序重启。
选择另一个真实配置数据的位置:文件、数据库,甚至是Web服务。我大多数时候喜欢使用数据库,因此我创建了一个简单结构的配置表来存储我的数据。
实现一个简单的库来封装你的配置访问,这样你就有了一个简单的API供应用程序其余部分使用(通过依赖注入)。隐藏app.config
的使用以及你的真实配置存储位置。由于.NET是强类型的,所以将每个检索到的字符串转换为最具体的类型(URL、Int32、FileInfo等)。
确定哪些配置设置可以在运行时安全更改,哪些配置不能。通常,某些设置需要随其他设置更改,或者根本不允许更改它们。如果您的所有配置数据都可以安全更改,则事情就变得很容易,但我非常怀疑这种情况。尽可能隐藏配置设置的可更改性和相互依赖性。
设计对真实配置数据不可用的响应。我喜欢将任何配置设置的缺失视为致命错误,会中止应用程序,除非我能够确定可用的默认值。同样,在没有配置存储容器(文件、数据库表等)的情况下,我也会中止应用程序。
享受您的应用程序,并祝您一切顺利。
查看ApplicationSettingsBase类中可用的事件。其中包括PropertyChanged和SettingChanging,可能会给您所需的内容。
您还可以监视文件,如果文件已更改,则调用reload方法以获取新的设置。
我认为在不重启的情况下动态切换配置是不可能的,所以如果您无法采用Jon的方法,您应该尝试提出其他方案。
无论如何,也许只是我对您的情况缺乏足够的信息,但这种方式有些可疑。
您确定更换配置文件是实现您需要满足的任何要求最好的方法吗?我的意思是,这是非常不寻常的事情。如果我是您,我会尝试想出其他方法。