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

ASP.NET Core 7.0集成测试无法找到XY.Api引用的问题

问题描述

我有两个项目:

  • XY.Api
  • XY.IntegrationTests(基于xUnit)

已给测试项目添加XY.Api引用,编写的基础测试代码如下:

public class UnitTest1
{
    [Fact]
    public void Test1()
    {
        Assert.Equal(1, AsdController.ASD());
    }
}

运行测试后出现错误:

System.IO.FileNotFoundException : 无法加载文件或程序集“XY.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”。系统找不到指定的文件。


编辑补充

运行以下测试代码后:

[Fact]
public void Test1()
{
    List<string> result = new();
    foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
    {
        result.Add(a.Location + "  --  " + a.FullName);
    }

    ;
    //Assert.Equal(1, UsersController.ASD());
}

结果列表中未包含XY.Api.dll,但测试项目的bin文件夹内确实存在该文件...


第二次更新

测试项目的.csproj文件内容:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net7.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
    <PackageReference Include="xunit" Version="2.6.1" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.5.3">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="coverlet.collector" Version="3.2.0">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\XY.Api\XY.Api.csproj" />
  </ItemGroup>

</Project>
可能的原因及解决办法

1. 项目引用路径错误

从.csproj里的ProjectReference路径..\..\XY.Api\XY.Api.csproj来看,需确认该相对路径是否与XY.Api项目的实际位置匹配。路径错误会导致编译时无法正确复制DLL到测试项目输出目录。

  • 解决:右键测试项目的「项目引用」,移除现有XY.Api引用,重新添加并选择正确的项目文件,让VS自动生成正确的相对路径。

2. 复制本地配置异常

检查测试项目中XY.Api引用的「复制本地」属性是否为True(默认应为True,可能被误修改)。若为False,编译时不会将XY.Api.dll复制到测试项目bin目录。

  • 解决:在测试项目的引用列表中找到XY.Api,右键→属性,将「复制本地」改为True。

3. 编译输出目录不匹配

测试运行器使用的工作目录可能和你查看的bin目录不一致,比如你看的是Debug目录,但测试用的是Release目录,反之亦然。

  • 解决:
    • 执行「生成→清理解决方案」,再重新生成整个解决方案。
    • 确认测试运行的配置(Debug/Release)与你查看bin目录的配置一致。

4. 程序集加载上下文限制

xUnit测试运行器会使用独立的AppDomain或AssemblyLoadContext加载程序集,即便DLL在bin目录,也可能因加载策略问题无法被找到。可尝试手动指定路径加载:

[Fact]
public void Test1()
{
    var apiDllPath = Path.Combine(AppContext.BaseDirectory, "XY.Api.dll");
    if (File.Exists(apiDllPath))
    {
        Assembly.LoadFrom(apiDllPath);
    }
    // 执行原测试逻辑
}

5. 目标框架不兼容

确认XY.Api项目的TargetFramework是否同样为net7.0,若XY.Api使用更高或更低版本的框架,会导致加载失败。

  • 解决:打开XY.Api的.csproj,检查<TargetFramework>节点,确保与测试项目一致(均为net7.0)。

6. 编译缓存异常

VS的编译缓存可能出现问题,导致文件未正确复制。

  • 解决:
    • 删除解决方案下的obj和bin目录,重新生成。
    • 关闭VS,删除隐藏的.vs文件夹,再重新打开项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:58:10