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

