.NET 8 Windows服务引用旧.NET Framework项目的连接字符串空指针问题求解
解决方案
以下是两种无需修改旧.NET Framework 4.6.1项目代码、也不用依赖注入或传递参数的简单解决办法:
方法1:给.NET 8项目添加兼容的app.config文件
.NET 8项目可以兼容传统的app.config配置文件,让旧项目的ConfigurationManager直接读取:
- 在你的.NET 8 Windows服务项目中,右键添加「应用程序配置文件」(命名为
app.config) - 在
app.config中添加<connectionStrings>节点,填入和appsettings.json中一致的连接字符串:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="YourConnStrName" connectionString="YourActualConnectionString" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>
- 选中
app.config文件,在属性面板设置「复制到输出目录」为「如果较新则复制」或「始终复制」
这样旧项目的ConfigurationManager.ConnectionStrings["YourConnStrName"]就能正常获取到值,不会触发空指针异常。
方法2:启动时手动注入连接字符串到ConfigurationManager
在.NET 8服务启动的初始化阶段,从appsettings.json读取连接字符串,手动添加到ConfigurationManager的连接字符串集合中:
// 在Program.cs或服务启动入口处执行 var config = new ConfigurationBuilder() .SetBasePath(AppContext.BaseDirectory) .AddJsonFile("appsettings.json", optional: false) .Build(); var targetConnStr = config.GetConnectionString("YourConnStrName"); if (!string.IsNullOrEmpty(targetConnStr)) { // 检查是否已存在同名连接字符串,避免重复添加 var existing = ConfigurationManager.ConnectionStrings["YourConnStrName"]; if (existing == null) { ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings( "YourConnStrName", targetConnStr, "System.Data.SqlClient")); // 匹配旧项目使用的数据库提供程序 } }
执行这段代码后,旧项目的ConfigurationManager就能正常读取到连接字符串,无需改动任何旧代码。
内容的提问来源于stack exchange,提问作者Dévan Coetzee
相关产品推荐
相关产品推荐

