You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将指定配置文件加载至自定义ExternalResourceSettings类实例

如何从指定配置文件加载ExternalResourceSettings实例?

我来帮你解决这个问题——把指定配置文件加载到你的ExternalResourceSettings实例里有两种比较实用的方法,我给你详细拆解一下:

方法一:通过Config对象提取配置节加载

因为ApplicationSettingsBaseLoadSettings方法是受保护的,我们先给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

火山引擎 最新活动