.NET 8中运行Xunit测试遇程序集加载错误
解决.NET 8迁移中Xunit测试无法加载xunit.execution.dotnet.dll的问题
关于错误路径的说明
错误信息里的C:\Dev\xunit\xunit\src\...路径不是问题根源:这个路径是Xunit项目自身的源码编译路径,报错时显示的是Xunit组件的调试栈信息,和你的本地文件系统完全无关,不需要在你的C盘创建该目录。
问题本质
核心问题是Xunit测试运行器在.NET 8环境下无法找到运行时依赖的xunit.execution.dotnet.dll,通常是迁移过程中测试项目的格式、包引用或构建配置与.NET 8不兼容导致的。
具体解决步骤
将测试项目转换为SDK-style格式
旧的.NET Framework测试项目(非SDK-style)和.NET 8的SDK-style项目结构不兼容。右键测试项目→编辑项目文件,确保开头是:<Project Sdk="Microsoft.NET.Sdk">同时确认项目的目标框架设置为.NET 8:
<PropertyGroup> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <IsPackable>false</IsPackable> </PropertyGroup>统一并重新安装Xunit相关NuGet包
- 卸载测试项目中所有旧的Xunit相关包(包括
xunit、xunit.runner.visualstudio、xunit.extensions等) - 重新安装适配.NET 8的稳定版包:
xunit(核心测试框架)xunit.runner.visualstudio(Visual Studio测试运行器集成)
不需要手动引用xunit.execution.dotnet.dll,NuGet会自动处理依赖关系,构建时将所需DLL复制到输出目录。
- 卸载测试项目中所有旧的Xunit相关包(包括
清理缓存并重建解决方案
- 删除测试项目和解决方案根目录下的
bin、obj文件夹 - 清除NuGet缓存:打开Visual Studio→工具→NuGet包管理器→包管理器设置→清除所有NuGet缓存
- 重启Visual Studio,然后重新生成整个解决方案
- 删除测试项目和解决方案根目录下的
检查Visual Studio测试运行器配置
- 确保使用的Visual Studio版本支持.NET 8(推荐VS2022 17.8及以上版本)
- 打开测试→测试设置→默认处理器架构,选择与项目匹配的架构(x64或x86)
- 如果有自定义的
.runsettings文件,暂时移除或注释其中的shadowCopy等可能影响程序集加载的配置
NuGet包工作机制补充
NuGet下载的包会存储在本地缓存目录(默认路径为C:\Users\<你的用户名>\.nuget\packages),项目构建时,NuGet会自动将所需的DLL文件复制到项目的输出目录(bin\Debug\net8.0或bin\Release\net8.0),不需要手动指定DLL的路径,只要包引用正确,构建完成后输出目录中应该包含xunit.execution.dotnet.dll。
内容的提问来源于stack exchange,提问作者Maya
相关产品推荐
相关产品推荐

