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

读取多个.config文件中connectionStrings遇空引用,求替代弃用API方案

解决读取多个自定义.config文件中connectionStrings的问题

默认情况下,ConfigurationManager只会自动加载程序的主配置文件(如app.config或web.config),你自定义命名的file1.ddl.config、file2.ddl.config不会被自动加载,这就是你调用ConfigurationManager.ConnectionStrings["NAME"]时出现空引用错误的原因。以下是两种可行的解决方法:

方法一:使用ConfigurationManager加载指定配置文件

需要先引用System.Configuration程序集,然后通过手动映射配置文件的方式加载目标文件,再读取其中的连接字符串:

using System.Configuration;

// 配置文件路径,替换为你的实际路径
string configPath = @"C:\YourProject\file1.ddl.config";

// 创建配置文件映射
var configMap = new ExeConfigurationFileMap { ExeConfigFilename = configPath };
// 加载指定配置文件
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

// 读取指定名称的连接字符串
ConnectionStringSettings connSetting = config.ConnectionStrings.ConnectionStrings["YourConnectionName"];
if (connSetting != null)
{
    string targetConnString = connSetting.ConnectionString;
    // 这里添加你的业务逻辑处理
}

如果是Web项目,将OpenMappedExeConfiguration替换为WebConfigurationManager.OpenMappedWebConfiguration即可,逻辑一致。

方法二:直接解析XML文件(轻量方案)

因为.config本质是标准XML文件,你可以直接用XML解析类读取,无需依赖System.Configuration的复杂配置体系,适合简单场景:

使用XmlDocument的示例:

using System.Xml;

XmlDocument configDoc = new XmlDocument();
configDoc.Load(@"C:\YourProject\file2.ddl.config");

// 定位到connectionStrings下的所有add节点
XmlNodeList connNodes = configDoc.SelectNodes("/configuration/connectionStrings/add");
foreach (XmlNode node in connNodes)
{
    string connName = node.Attributes["name"]?.Value;
    string connString = node.Attributes["connectionString"]?.Value;
    if (!string.IsNullOrEmpty(connName) && !string.IsNullOrEmpty(connString))
    {
        // 处理读取到的连接字符串
    }
}

使用LINQ to XML的示例:

using System.Xml.Linq;

XDocument configXDoc = XDocument.Load(@"C:\YourProject\file2.ddl.config");
var connStringList = configXDoc.Descendants("add")
                               .Where(x => x.Parent.Name.LocalName == "connectionStrings")
                               .Select(x => new 
                               {
                                   Name = x.Attribute("name")?.Value,
                                   ConnectionString = x.Attribute("connectionString")?.Value
                               });

foreach (var item in connStringList)
{
    if (!string.IsNullOrEmpty(item.Name) && !string.IsNullOrEmpty(item.ConnectionString))
    {
        // 这里添加你的业务逻辑处理
    }
}

内容的提问来源于stack exchange,提问作者Valentina Martinez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:16:07