运行时动态修改默认App.config
为了动态加载需要配置项的模块,需要一种方法在内存中创建一个新的app.config,整合来自模块的各个节,并让应用程序使用它,而不会覆盖默认的app.config。
针对这个问题,我们找到了一种类似于问题中提出的解决方案。但是,提供的代码并没有产生预期的结果。链接问题中提到的方法只有在配置系统首次使用之前执行才能工作。ClientConfigPaths类中的缓存值阻止了在初始使用后读取新的配置。
因此,本解决方案还删除了这些缓存值。以下代码实现了此任务:
<code class="language-csharp">public abstract class AppConfig : IDisposable { // ... } private class ChangeAppConfig : AppConfig { // ... private static void ResetConfigMechanism() { // ... typeof(ConfigurationManager) .Assembly.GetTypes() .Where(x => x.FullName == "System.Configuration.ClientConfigPaths") .First() .GetField("s_current", BindingFlags.NonPublic | BindingFlags.Static) .SetValue(null, null); } }</code>
使用此代码,新的app.config将在应用程序运行时读取和使用。可以通过释放AppConfig实例来恢复默认的app.config。如果需要永久更改,则可以在不使用AppConfig.Change方法的情况下执行它,将其放在应用程序的开头。
以上是如何在运行时动态更改 app.config 而不覆盖默认值?的详细内容。更多信息请关注PHP中文网其他相关文章!