.NET Core中DLL如何访问连接字符串?读取失败问题排查
.NET Core类库无法读取app.config连接字符串的问题解决
问题根源
.NET Core的配置机制和.NET Framework完全不同:类库项目中的app.config不会被自动加载或合并到应用的配置体系中,只有启动项目(也就是你的somethingSite)的配置文件才会被整个应用(包括引用的所有类库)读取。你把连接字符串放在类库的app.config里,DAL自然找不到。
具体解决方案
分两种常见情况处理:
情况1:BAL和DAL是.NET Framework编写的类库(依赖ConfigurationManager)
如果你的BAL/DAL是基于.NET Framework开发的,依然使用ConfigurationManager.ConnectionStrings["con"]读取配置,按以下步骤操作:
- 移除
CommonActivity类库中的app.config文件 - 在启动项目somethingSite中添加
App.config文件(右键项目→添加→新建项→应用程序配置文件) - 在App.config中添加连接字符串节点:
<configuration> <connectionStrings> <add name="con" connectionString="你的数据库连接字符串内容" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>
- 给启动项目安装NuGet包:
Microsoft.Extensions.Configuration.ConfigurationManager,这个包让.NET Core应用可以兼容.NET Framework的ConfigurationManager读取方式
情况2:BAL和DAL是.NET Core/.NET 5+编写的类库(推荐使用依赖注入)
如果是基于.NET Core的类库,推荐使用.NET Core原生的配置系统和依赖注入:
- 移除
CommonActivity类库中的app.config文件 - 在启动项目somethingSite的
appsettings.json中添加连接字符串:
{ "ConnectionStrings": { "con": "你的数据库连接字符串内容" } }
- 修改DAL中的
DataAccessLayer类,通过构造函数注入IConfiguration来读取配置:
public class DataAccessLayer { private readonly IConfiguration _config; // 构造函数注入IConfiguration public DataAccessLayer(IConfiguration config) { _config = config; } public void YourDataMethod() { // 读取连接字符串 string connectionString = _config.GetConnectionString("con"); // 后续数据库操作逻辑 } }
- 确保启动项目的依赖注入容器已注册
IConfiguration(ASP.NET Core项目默认已自动注册;控制台项目需要手动构建配置并注册)
关键注意事项
- 无论哪种情况,所有配置项都应该放在启动项目的配置文件中,类库本身不应该存放独立的配置文件
- 如果混用.NET Framework和.NET Core组件,必须通过
ConfigurationManager兼容包来桥接配置读取逻辑
内容的提问来源于stack exchange,提问作者Mustakim Khalifa
相关产品推荐
相关产品推荐

