我正在开发一个任务系统,我想要一些进程隔离,为此我正在启动一个子控制台应用程序来执行一些未知的代码。基本上,子进程/隔离部分我希望通过父应用程序/进程不透明。我试图在子进程中获得与父进程相同的环境设置 - 最后的痛苦就是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级)并逐个刷新 - 这看起来很愚蠢。
我可以采取哪种更好的方法?或者我遗失/乱搞的东西?