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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:14:57