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

VS2019中NUnit测试无法识别主项目Entity Framework的问题排查

问题描述

运行NUnit测试时出现以下错误:

System.InvalidOperationException : No connection string named 'HPCEntities' could be found in the application config file.

环境说明:

  • 两个相邻目录的项目:Web应用(启动项目) + NUnit测试项目
  • 已尝试的操作:
    1. 将Web应用的Web.config完整复制到测试项目目录,无效
    2. 创建仅包含目标连接字符串的app.config放在测试项目根目录,无效

测试项目的.csproj内容:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RootNamespace>HPC_NUnit_Tests</RootNamespace>

    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <None Remove=".gitignore" />
    <None Remove="Web.config" />
  </ItemGroup>

  <ItemGroup>
    <Content Include="Web.config" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="EntityFramework" Version="6.4.4" />
    <PackageReference Include="nunit" Version="3.12.0" />
    <PackageReference Include="NUnit3TestAdapter" Version="3.15.1" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
    <PackageReference Include="RhinoMocks" Version="3.6.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\HPCv4\HPCv4.csproj" />
      
  </ItemGroup>
    
</Project>

测试项目的app.config内容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="HPCEntities" connectionString="metadata=res://*/DataModel.HPCEntity.csdl|res://*/DataModel.HPCEntity.ssdl|res://*/DataModel.HPCEntity.msl;provider=System.Data.SqlClient;provider connection string=&quot;data.../>
    </connectionStrings>
</configuration>

测试的SetUp方法代码:

private IMasterWipRepository repo;

[SetUp]
public void SetUp()
{
    HPCEntityContext entity = new HPCEntityContext();
    IRepositoryFactory repoFactory = RepositoryFactory.GetTest(entity);
    repo = repoFactory.GetMasterWipRepo();
}
问题分析与解决方案

存在的配置错误/缺失

  1. 配置文件识别逻辑错误
    .NET Core测试项目只会自动读取app.config,测试项目中添加的Web.config不会被测试运行时识别,且.csproj中特意将Web.config设为Content类型,属于无效操作。

  2. app.config未正确复制到输出目录
    即使创建了app.config,如果未设置“复制到输出目录”属性,编译后测试运行的输出目录中不会存在该文件,导致EF6无法读取连接字符串。

  3. 连接字符串不完整
    提供的app.config中连接字符串内容被截断(结尾为data.../>),会导致XML配置文件解析失败,EF6无法找到有效连接字符串。

  4. EF6在.NET Core中的配置读取兼容性问题
    EF6原本为.NET Framework设计,在.NET Core项目中读取配置的逻辑有差异,且依赖版本存在潜在冲突(例如Microsoft.NET.Test.Sdk版本16.4.0相对老旧,与netcoreapp3.1可能存在兼容性问题)。

修复步骤

  • 移除无效的Web.config配置
    删除测试项目中的Web.config文件,同时删掉.csproj中以下相关配置节点:

    <ItemGroup>
      <None Remove=".gitignore" />
      <None Remove="Web.config" />
    </ItemGroup>
    
    <ItemGroup>
      <Content Include="Web.config" />
    </ItemGroup>
    
  • 确保app.config复制到输出目录
    在测试项目的.csproj中添加以下配置,保证app.config会被复制到输出目录:

    <ItemGroup>
      <None Update="app.config">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </None>
    </ItemGroup>
    
  • 修复连接字符串
    补全app.config中被截断的连接字符串,确保XML标签完整闭合,正确格式示例:

    <add name="HPCEntities" connectionString="metadata=res://*/DataModel.HPCEntity.csdl|res://*/DataModel.HPCEntity.ssdl|res://*/DataModel.HPCEntity.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=YOUR_SERVER;initial catalog=YOUR_DB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    
  • 显式指定连接字符串(可选)
    如果配置读取仍有问题,可在实例化HPCEntityContext时显式传入连接字符串名称:

    HPCEntityContext entity = new HPCEntityContext("HPCEntities");
    
  • 升级依赖版本
    将测试项目的相关依赖升级到兼容netcoreapp3.1的较新版本,例如:

    • nunit升级到3.13.3+
    • NUnit3TestAdapter升级到3.17.0+
    • Microsoft.NET.Test.Sdk升级到16.11.0+

内容的提问来源于stack exchange,提问作者Doug Gardiner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:47:08