dotnet test运行崩溃:远程主机强制关闭连接问题排查
排查虚拟机中xUnit.net单元测试Socket连接失败的方向
本地C#测试项目单元测试运行正常,但在Windows 10 x64虚拟机中(.NET SDK 6.0.408版本与本地一致)构建成功但测试运行失败,报错如下:
Test Run Aborted with error System.Exception: One or more errors occurred. ---> System.Exception: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.. ---> System.Exception: An existing connection was forcibly closed by the remote host. at System.Net.Sockets.NetworkStream.Read(Span`1 buffer) --- End of inner exception stack trace --- at System.Net.Sockets.NetworkStream.Read(Span`1 buffer) at System.Net.Sockets.NetworkStream.ReadByte() at System.IO.BinaryReader.Read7BitEncodedInt() at System.IO.BinaryReader.ReadString() at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.LengthPrefixCommunicationChannel.NotifyDataAvailable() at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.TcpClientExtensions.MessageLoopAsync(TcpClient client, ICommunicationChannel channel, Action`1 errorHandler, CancellationToken cancellationToken) --- End of inner exception stack trace ---
结合xUnit.net通过Socket异步执行测试的机制,可按以下方向排查:
检查VM防火墙规则
确认Windows防火墙或第三方防火墙是否拦截了测试平台的TCP连接。xUnit默认使用本地回环地址(127.0.0.1)的随机端口,需允许TestHost.exe或dotnet test相关进程的入站、出站连接。可临时关闭VM防火墙做快速验证。验证本地回环(Loopback)连通性
用ping 127.0.0.1测试回环接口是否正常响应;执行netsh interface ipv4 show interfaces查看回环接口状态,确保未被禁用。调整VM网络虚拟化设置
- 若VM使用NAT模式,检查NAT规则是否限制了本地回环流量;
- 尝试切换网络适配器模式(如从NAT改为桥接)测试;
- 若基于Hyper-V,检查虚拟交换机配置是否允许内部通信。
确认测试进程权限
尝试用管理员权限运行dotnet test,排除受限用户无法创建Socket连接的可能;检查运行测试的账号是否具备网络操作权限。强制xUnit使用命名管道替代TCP
在项目根目录创建.runsettings文件,添加以下配置强制使用命名管道通信,规避Socket问题:<RunSettings> <RunConfiguration> <TestHostCommunication>NamedPipe</TestHostCommunication> </RunConfiguration> </RunSettings>运行测试时指定配置文件:
dotnet test --settings .runsettings排查VM系统资源与端口限制
- 用
netstat -ano查看端口占用情况,确认是否存在临时端口耗尽的问题; - 检查VM的CPU、内存资源是否充足,资源不足可能导致TestHost进程异常退出,进而触发Socket连接关闭。
- 用
内容的提问来源于stack exchange,提问作者R. Preston
相关产品推荐
相关产品推荐

