You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何读取非web.config的用户自定义Configuration配置文件

解决办法

1. 配置文件路径通用获取

Web项目的IIS进程工作目录不是项目根目录,直接传相对路径会默认定位到IIS Express安装目录。用HostingEnvironment.MapPath方法可以映射站点内的虚拟路径到物理绝对路径,本地调试和服务器部署都通用:

string configPath = HostingEnvironment.MapPath("~/AppData/CMS/Configurations/oneABC.config");

需要提前引用命名空间System.Web.Hosting,该方法不需要依赖当前请求上下文,静态方法里也可以正常调用。

2. 自定义XML配置读取

你的oneABC.config不属于标准的.NET配置节结构,用ConfigurationManager读取AppSettingsSection的方式不适用,直接用XML解析更简单灵活,适配动态增减的add节点。

注意:你提供的oneABC.config存在根节点首尾不匹配的问题,需要先修正为闭合标签一致,比如把结束标签改为</oneABC>,否则XML加载会报错。

完整实现代码

using System.IO;
using System.Xml.Linq;
using System.Web.Hosting;
using System.Globalization;
using System.Linq;

public static bool GetConfigurationValue(string culture)
{
    // 1. 映射得到配置文件的绝对物理路径
    string configPath = HostingEnvironment.MapPath("~/AppData/CMS/Configurations/oneABC.config");
    if (!File.Exists(configPath))
    {
        // 配置文件不存在的情况,可按业务需求返回默认值
        return false;
    }

    try
    {
        // 2. 加载XML文件
        XDocument xDoc = XDocument.Load(configPath);
        // 3. 把传入的culture转大写,匹配配置中的code格式
        string targetCode = culture.Trim().ToUpper(CultureInfo.InvariantCulture);

        // 4. 查找匹配code的add节点
        var targetNode = xDoc.Descendants("add")
            .FirstOrDefault(node => 
                node.Attribute("code")?.Value?.ToUpper(CultureInfo.InvariantCulture) == targetCode);

        if (targetNode == null)
        {
            // 未找到对应国家配置,返回默认值
            return false;
        }

        // 5. 读取view属性转为布尔值返回
        if (bool.TryParse(targetNode.Attribute("view")?.Value, out bool viewValue))
        {
            return viewValue;
        }
        return false;
    }
    catch
    {
        // XML解析异常的兜底处理,可按业务需求调整
        return false;
    }
}

内容的提问来源于stack exchange,提问作者robin saxena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 10:45:05