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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:35:14