PAYATHON 2026

如何阻止 Visual Studio 自动终止子进程?

排障赵师傅

如果测试通过 ReSharper 运行,可以打开 ReSharper → Options → Tools → Unit Testing → Test Runner,删除 diff tool 对应的子进程处理记录,再将处理方式设为 Ask what to do。下次弹窗时,选择让进程继续运行。

这个方法适用于 ReSharper 弹出的提示。题目描述与 ReSharper 的行为吻合,但仅凭“在 VS2026 中运行测试”,还无法判断弹窗是否来自 Visual Studio 自带的测试运行器。

为什么会自动关闭 diff tool?

ReSharper 会跟踪测试启动的子进程。测试结束后,如果子进程仍未退出,ReSharper 会询问如何处理,也可以记住对该进程的选择。如果误选了终止进程,并勾选“不再询问”,以后就会自动终止该进程。JetBrains 的 Test Runner 文档说明,删除设置页中对应的进程记录,即可撤销已保存的操作。

如何恢复询问并保留 diff tool?

  1. 在 Visual Studio 中打开 ReSharper → Options。
  2. 进入 Tools → Unit Testing → Test Runner。
  3. 找到 If the spawned processes do not exit after [x] seconds。
  4. 在该区域的进程列表中,删除 diff tool 对应的记录。
  5. 将子进程处理方式设为 Ask what to do,保存设置。
  6. 重新运行一个会打开 diff tool 的快照测试。弹窗再次出现时,选择让进程继续运行。确认选择正确后,再根据需要勾选“不再询问”。

这里要调整的是 spawned processes,即测试启动的子进程。注意与 test runner process 区分。

设置保存在哪里?

ReSharper 使用分层设置,文件位置取决于保存设置时选择的层级:

设置层文件位置
本机全局设置%APPDATA%\JetBrains\Shared\vAny\GlobalSettingsStorage.DotSettings
解决方案个人设置解决方案目录中的 <SolutionName>.sln.DotSettings.user
解决方案团队共享设置解决方案目录中的 <SolutionName>.sln.DotSettings

ReSharper 设置管理文档列出了这些位置,但无法据此确定本次选择具体保存在哪个文件中。建议先通过设置界面删除记录,无需查找内部配置键。

如果需要检查全局设置文件,可以在 PowerShell 中读取:

$settingsPath = Join-Path $env:APPDATA `
    'JetBrains\Shared\vAny\GlobalSettingsStorage.DotSettings'

if (Test-Path -LiteralPath $settingsPath) {
    Get-Content -LiteralPath $settingsPath
}

这段命令只读取文件,不会改变设置。在确认具体配置键之前,不建议直接修改 XML 或删除整个设置文件。

没有安装 ReSharper 时怎么办?

如果使用 Visual Studio 自带的 Test Explorer,上述路径不适用。先确认弹窗标题、已安装的测试扩展和实际使用的运行入口。如果通过 dotCover 运行测试,也要检查它的 Test Runner 设置;dotCover 官方文档中也有子进程处理策略的说明。

目前的信息不足以确定 Visual Studio 原生测试运行器中对应的设置位置,无法给出可靠的 VS2026 注册表键或 .runsettings 参数。如果已确认弹窗来自 ReSharper,清除已记住的进程处理记录即可,无需修改 Verify.xunit 测试代码。

备注:内容仅供参考。