Visual Studio 2019 进程未关闭,NodeJS 问题

Posted

技术标签:

【中文标题】Visual Studio 2019 进程未关闭,NodeJS 问题【英文标题】:Visual Studio 2019 Processes not shutting down, NodeJS issues 【发布时间】:2020-05-03 15:45:12 【问题描述】:

我正在全新安装 Windows 10 Pro (10.0.18362) 并尝试为 .NET Core 3.1 Web 开发设置和配置 Visual Studio 2019,但遇到了几个问题。

我创建了一个默认的 React.js ASP.NET Core Web 应用程序并运行了该项目。一切似乎都很好,只是在更新 javascript 代码后,浏览器会在相当长的暂停后更新。事情似乎落后了。

从默认 Web 应用(无更新)关闭 Visual Studio 2019 后,有几个进程似乎挂起,必须手动关闭:

除了手动安装 Node.js V12.4 和 V13.6 之外,我还尝试使用 Visual Studio 安装程序提供的 Node.js 安装 Visual Studio 2019,结果相同。

另一个问题:如果我使用 npx create-react-app client-app --typescript 将项目从 JavaScript 更新到 TypeScript,热更新将完全停止工作。但是在更新 JavaScript 代码并刷新浏览器之后,事情似乎更新了,所以它似乎正在重新编译。我试过在 Firefox 和 Chrome 中调试,结果都一样。

我非常犹豫是否继续使用此安装,因为在这些过程中我遇到了几个问题。如果它们意外挂起并且没有关闭,它们将继续使用旧版本的代码,并且在进程关闭之前所做的任何事情都不会更新,从而导致完全的精神错乱。

我是否需要执行特定的安装过程作为解决方法?还是我可能缺少 NuGet 包或附加组件?由于这是全新安装的操作系统,是否需要安装 Windows 功能?或其他可能导致此问题的配置/权限更改?

在此安装之前,只有在 Visual Studio 2017 中创建的项目似乎可以按预期工作。但是我需要在 .NET Core 3.0 中开发这个网站,而且看起来只支持 Visual Studio 2019。

更新

经过一番折腾,看起来是 Node 引起了问题。如果我手动关闭 Node 进程,那么 Visual Studio 最终会关闭——但它会保留其他进程,如 VSCompiler 和控制台运行。即使我以管理员身份运行 Visual Studio,也会发生这种情况。

我应该在 Visual Studio 之前安装节点,还是反之亦然?是否有可能我需要使用 Visual Studio 或 Node 执行一些设置才能让事情正常工作?

更新 2

在没有找到任何修复程序后,我尝试完全重新安装 Windows,包括磁盘格式,然后只安装了 Visual Studio 和 Node.js。

我在执行此操作时发现了一件有趣的事情:我最初只安装了 Visual Studio,并同时选择了“Web 开发”和“NodeJS 开发”。但是,当我尝试在不进行任何更改的情况下运行新的 .NET Core Web 应用程序时,我收到一条错误消息,指出未安装 Node.js — 即使我能够在 Visual Studio 下的 MsBuilds 文件夹中找到 node.exe .

我完全卸载了 Visual Studio 和所有其他组件,安装了 Node.js,然后是 Visual Studio,但问题仍然存在。每当我尝试使用 SPA 模板运行任何类型的 JavaScript 时,Node.js 进程都不会关闭。如果我终止 Node.js 进程,那么 Visual Studio 最终将关闭,但它会留下 Console Window HostVBCSCompiler 运行,必须手动关闭。

我还尝试创建一个新的 .NET Core Web 应用程序,但这次选择了 Angular 模板,它工作得更好:热重载工作,它似乎运行得更快。但是进程仍然没有关闭。唯一的区别是杀死 Node.js 进程不会让 Visual Studio 关闭。

更新 3

也不确定这是否有帮助,但我尝试将node.exe 属性设置为“以管理员身份运行此程序”以查看它是否恰好是权限问题。这产生了相同的结果。但是我注意到会弹出两个窗口:第一个是空白窗口,然后是实际的 Angular 服务器窗口。

我不确定它是否相关,但是当我再次尝试运行 Angular 应用程序时,看起来 Angular 指向的另一个(随机)端口比项目调试设置中设置的端口。

我注意到的一件事是通常的服务器消息没有显示在输出窗口中。它以前显示node.js 消息,例如“服务器正在运行”和其他编译器消息,但现在它只显示.NET 输出。

更新 4

越来越近,我卸载了 Visual Studio 和 Node.js,然后确保从我的 AppDataUser/Local 目录中清除所有剩余的 Visual Studio 和 node_modules 文件夹,然后进行磁盘清理。最后,我重新安装了 Visual Studio(确保以管理员身份运行安装程序)并重新安装了 Node.js。

我以管理员身份运行 Visual Studio 并创建了一个新的 Angular 应用程序。现在,Angular 应用程序按预期工作,HMR 工作并且一切似乎运行顺利除了进程仍然挂起。主要区别在于,杀死 Microsoft Visual Studio 2019 进程会杀死所有东西,而在它离开 VBSCCompilerNode.js 和控制台运行之前。

创建 React 应用时,一切正常。但是,同样,HMR 不起作用,并且还会让进程继续运行。关闭主要的 Visual Studio 进程似乎现在也可以清理这些了。

【问题讨论】:

是否有防病毒软件干扰? @IanKemp 不,我进行了完整的重新安装,包括格式并再次尝试,没有安装除 VisualStudio 2019 和 Node.js 之外的任何其他软件,结果相同 我建议使用 Visual Studio 中内置的反馈工具向 Microsoft 提出支持案例。 @IanKemp 我已经这样做了,waiting on a reply 我在 Visual Studio Code 中的反应模板应用程序中遇到了同样的问题。很遗憾他们因为low priority 而关闭了您打开的支持案例。 【参考方案1】:

恐怕我没有解决办法,但如果有人想要一种快速的方法来杀死所有错误的节点进程并加快速度,他们可以运行:

taskkill /IM "node.exe" /F

在 VS 运行时执行此操作没有任何问题。

【讨论】:

我只是要把它添加到我的构建过程中。 VS2019 经常为我挂起,直到我杀死它。 这个方法的一个问题,它只会杀死节点进程并且不会停止VBCSCompiler.exe,这将阻止任何更改被加载,直到它关闭,它也不会杀死任何conhost.exe 进程也与节点进程相关联。你知道有什么方法可以杀死从 VS 产生的相关进程吗?【参考方案2】:

在 Visual Studio 2019 中,转到“工具”、“选项”、“调试”、“常规”,底部有一个“调试停止时自动关闭控制台”复选框。在新版本的 VS 上默认未选中它,如果您查看 ASP.NET Core 项目属性,您会发现它是一个控制台项目。因此,如果未选中复选框,控制台不会自动关闭。

问题是它是一个隐藏的控制台,因此您无法看到它来手动关闭它。如果您选中自动关闭控制台的复选框,那么只要您停止调试器,控制台和 node.js 就会停止运行。同样在选项中,您可能还想查看一个 Node.Js 工具区域。当进程异常退出时,它有一个等待输入的复选框。如果控制台是隐藏的,您将无法进行输入,这样也可以保持进程打开。

如果您不想更改任何调试选项,另一个选项是转到您的项目属性 > 调试并将 IIS Express 配置文件的启动设置更改为 Project 而不是 IIS Express。这实际上会使控制台/命令提示符可见,当你完成调试时,你可以 Ctrl-C 停止调试器,或者当你点击停止时,控制台会给你消息 Press any key to close this window 。 . .

【讨论】:

【参考方案3】:

我在使用 React SPA 时遇到了同样的问题,这对我有用:

工具 -> 选项 -> 调试 -> 常规 -> 为 ASP.NET(Chrome、Edge 和 IE)启用 JavaScript 调试(Visual Studio 2017 和 2019)

还有播放按钮旁边的下拉菜单:

脚本调试 -> 禁用

【讨论】:

【参考方案4】:

有可能在 Visual Studio 中运行 prepost 构建任务。我会在项目设置中寻找它们。 我使用 VSCode。因此,如果您按照以下说明进行操作,您将能够解决问题。

    在您的项目根文件夹中创建一个.bat 文件(例如kill-node.bat),其内容如下:
tasklist | find /i "node.exe" && taskkill /im node.exe /F || echo process "node.exe" not running.
    添加一个pre-build-task 执行.bat 文件 添加一个post-build-task 执行.bat 文件 完成!现在,每次您开始调试/重新调试应用程序时,.bat 文件都会杀死所有节点僵尸实例。也同样适用于您停止错误的时刻。

VSCode 指南:

    执行上述算法的第 1 步。 在.vscode 文件夹中打开文件tasks.json 并在其任务顶部添加新文件:

  "label": "kill-node",
  "command": "kill-node.bat"
,
    现在更改build 任务代码(以在预构建时激活我们的kill-node 任务):

  "label": "build",
  "dependsOn": "kill-node",  // <<< extra string to run kill-node task prior to build task
  "command": "dotnet",
  //... the rest of build task code

    打开launch.json文件并插入新字符串:

  "version": "0.2.0",
  "configurations": [
  
    "name": ".NET Core Launch (web)",
    "type": "coreclr",
    "request": "launch",
    "preLaunchTask": "build",
    "postDebugTask": "kill-node",  //  <<< extra string to run kill-node on debug end
    //... the rest of launch.json file
  

    就是这样。现在您无需再关心消耗您内存的 node-zombie 实例了。

【讨论】:

【参考方案5】:

这应该在 ASP.NET Core 5.0 中修复,如果可能,请尝试升级。

【讨论】:

这是我的希望,但看起来它仍然是 .NET 5 和 Visual Studio V16.8.2 的问题。刚刚创建了一个新的默认项目,运行并关闭它,那些讨厌的进程仍在运行 那么应该在github.com/dotnet/aspnetcore举报 某个 PR 是否积极修复了这个问题?

以上是关于Visual Studio 2019 进程未关闭,NodeJS 问题的主要内容,如果未能解决你的问题,请参考以下文章

模块未定义且进程未在 Visual Studio 代码中的 eslint 中定义

Visual Studio 中的conhost.exe 进程重复无法关闭主机

远程进程的 Visual Studio 2012 调试未按预期工作

Visual Studio 2017 - Node.JS 服务器进程 - 关闭?

具有 ID #### 的进程未在 Visual Studio Professional 2013 更新 3 中运行

C++ 程序未在 Visual Studio 2010 中读取绝对路径 [关闭]