如何将指定配置文件加载至自定义ExternalResourceSettings类实例
如何从指定配置文件加载ExternalResourceSettings实例?
我来帮你解决这个问题——把指定配置文件加载到你的ExternalResourceSettings实例里有两种比较实用的方法,我给你详细拆解一下:
方法一:通过Config对象提取配置节加载
因为ApplicationSettingsBase的LoadSettings方法是受保护的,我们先给ExternalResourceSettings这个partial类加一个扩展方法,方便调用:
internal sealed partial class ExternalResourceSettings { // 新增方法,用于从指定的配置节加载设置 public void LoadFromConfigurationSection(System.Configuration.ClientSettingsSection section) { this.LoadSettings(section); } }
接下来用你已经熟悉的ConfigurationManager打开指定配置文件,提取对应配置节后加载到实例中:
// 1. 配置文件映射 var configFileMap = new ExeConfigurationFileMap(); configFileMap.ExeConfigFilename = @"C:\YourPath\ExternalResources.config"; // 替换成你的实际文件路径 // 2. 获取映射的配置对象 var config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None); // 3. 找到ExternalResourceSettings对应的配置节 var appSettingsGroup = config.GetSectionGroup("applicationSettings"); var externalSettingsSection = appSettingsGroup?.Sections["YourNamespace.ExternalResourceSettings"] as System.Configuration.ClientSettingsSection; // 4. 加载到实例中 if (externalSettingsSection != null) { var externalSettings = new ExternalResourceSettings(); externalSettings.LoadFromConfigurationSection(externalSettingsSection); // 现在externalSettings就包含了指定文件里的所有外部资源配置啦 }
注意:把YourNamespace替换成你实际的命名空间,配置节名称必须和ExternalResourceSettings在配置文件里的节点名称完全一致。
方法二:修改SettingsProvider路径直接加载
这种方法不需要处理Config对象,直接修改默认的LocalFileSettingsProvider的配置文件路径,让ExternalResourceSettings读取指定文件:
var externalSettings = new ExternalResourceSettings(); var fileProvider = externalSettings.Providers.OfType<System.Configuration.LocalFileSettingsProvider>().FirstOrDefault(); if (fileProvider != null) { // 设置配置文件的名称(不带扩展名) // 比如你的文件是ExternalResources.config,这里就填"ExternalResources" fileProvider.ApplicationName = System.IO.Path.GetFileNameWithoutExtension(@"C:\YourPath\ExternalResources.config"); // 重新加载设置 externalSettings.Reload(); }
这个方法更简洁,但要确保你的外部配置文件结构和默认app.config里的applicationSettings节点结构一致,这样Provider才能正确读取内容。
补充说明
你的ExternalResourceSettings默认构造函数读取默认配置文件,是因为它使用的LocalFileSettingsProvider默认指向当前应用的exe.config或app.config。上面两种方法要么手动导入指定配置节,要么修改Provider的读取目标,以此实现加载自定义配置文件的目的。
内容的提问来源于stack exchange,提问作者MiguelSlv




