.NET 8迁移后ConfigurationManager仅返回默认LocalDb连接串问题
解决.NET 8类库(EF6)迁移后无法读取自定义连接串的问题
核心原因
类库项目本身不会独立读取自身的配置文件,ConfigurationManager会读取**入口执行程序(此处为MS Test测试项目)**的配置。如果测试项目的配置中缺少自定义连接串,就会返回默认的LocalDb连接串。
解决步骤
1. 确保测试项目的配置文件包含目标连接串
打开你的MS Test项目的app.config,添加对应的connectionStrings节点,与控制台项目中的配置一致:
<configuration> <connectionStrings> <add name="sqlServer" providerName="System.Data.SqlClient" connectionString="Data Source=localhost;Initial Catalog=MyDB;Integrated Security=True;" /> </connectionStrings> <!-- 其他配置节点 --> </configuration>
2. 验证类库配置文件的复制属性
右键类库项目中的app.config → 属性,将复制到输出目录设置为如果较新则复制或始终复制。注意:最终生效的仍是测试项目的配置,此步骤仅确保类库配置被正确输出。
3. 检查EF6的默认连接工厂配置
如果配置文件中存在entityFramework节点的默认连接工厂设置,可能会覆盖自定义连接串。可移除或修改该配置:
<entityFramework> <!-- 移除或注释以下默认连接工厂配置 --> <!-- <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> <parameters> <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True" /> </parameters> </defaultConnectionFactory> --> </entityFramework>
同时确保DbContext构造函数明确指定连接串名称:
public class MyDbContext : DbContext { // 明确指定使用配置中名为sqlServer的连接串 public MyDbContext() : base("name=sqlServer") { } }
4. 确保测试项目引用必要的NuGet包
在MS Test项目中添加System.Configuration.ConfigurationManager包(版本需兼容.NET 8):
<ItemGroup> <PackageReference Include="System.Configuration.ConfigurationManager" Version="8.0.0" /> </ItemGroup>
5. 清理并重建解决方案
右键解决方案 → 清理解决方案,随后右键 → 生成解决方案,确保所有配置文件被正确复制到测试项目的输出目录。
内容的提问来源于stack exchange,提问作者Olivier MATROT
相关产品推荐
相关产品推荐

