.net App配置文件 - 动态加载/刷新整个文件?

时间:2014-03-28 18:39:37

标签: c# configuration app-config

我正在开发一个任务系统,我想要一些进程隔离,为此我正在启动一个子控制台应用程序来执行一些未知的代码。基本上,子进程/隔离部分我希望通过父应用程序/进程不透明。我试图在子进程中获得与父进程相同的环境设置 - 最后的痛苦就是app.config。

理想情况下,我希望在子控制台应用中读取/提供父进程app.config。为此,我到目前为止找到了最好的两种方式:

Change default app.config at runtime

这可能有效(没有经过测试) - 但我对此感到有点不舒服,因为这是触及固定的内部结构。

以下代码:

private static void LoadConfig(string configPath)
{
    var targetConfig = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap() { ExeConfigFilename = configPath }, ConfigurationUserLevel.None);

    var sectionList = targetConfig.Sections.Keys.Cast<string>();

    foreach (ConfigurationSectionGroup part in targetConfig.SectionGroups)
    {
        sectionList = sectionList.Concat(part.Sections.Keys.Cast<string>().Select(k => part.Name + "/" + k));  
    }

    targetConfig.SaveAs(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath, ConfigurationSaveMode.Full);

    foreach (var x in sectionList)
    {
        ConfigurationManager.RefreshSection(x);
    }
}

这对我也有用 - 因为我可以愉快地覆盖客户端控制台配置文件。痛苦是&#34;愚蠢&#34; .RefreshSection()方法 - 它只刷新完全命名/特定的部分。例如 - 如果我有一个system.serviceModel条目.RefreshSection(system.serviceModel)不起作用 - 只是默默地传递!它需要.RefreshSection(system.serviceModel / client),以及所有这些带有完整路径的部分,所以我必须遍历整个SectionGroup树并为所有部分构建路径(我只是在上面的代码中这样做)为1级)并逐个刷新 - 这看起来很愚蠢。

我可以采取哪种更好的方法?或者我遗失/乱搞的东西?

0 个答案:

没有答案