运行/调试ASP.NET Core应用程序的最简单方法

Jus*_*tin 6 asp.net asp.net-core

我刚刚将我的ASP.NET(框架)MVC应用程序升级到ASP.NET Core 2.2。这个过程非常痛苦,但是在本地运行Web应用程序则更加痛苦。

在IIS Express中运行的问题:

  • 如果我使用F5启动该应用程序(以启用调试功能),则一旦停止调试,浏览器窗口就会关闭,因此每次更改任何代码后,我都必须从首页重新开始。
  • 如果我使用Ctrl + F5键启动应用程序(无调试),则经过几次重建后,网站似乎消失了,这意味着任何新页面请求都只是说找不到主机。然后,我必须再次按Ctrl + F5才能再次使用它,但是然后我又回到了主页。
  • Visual Studio 2019有时决定在我现有的Chrome窗口的新选项卡上启动网页,但有时决定在全新的Chrome窗口中启动网页。经过几分钟的开发,我剩下多个选项卡和打开的窗口。

在IIS中运行的问题:

  • 它运行的唯一方法是,如果我手动编辑Web.config以使其具有processPath(“ dotnet”)和参数(“ ./bin/Debug/Housters.Web.dll”)的正确值。尽管我的.csproj中具有IsTransformWebConfigDisabled = true,但是每次我构建或运行应用程序时,Visual Studio都喜欢将其插入aspNetCore processPath =“%LAUNCHER_PATH%” arguments =“%LAUNCHER_ARGS%”。因此,我必须不断进入git并还原这些更改,否则我的应用将退回到可怕的ANCM进程内处理程序加载失败页面。
  • 假定Web.config具有正确的值,则在浏览器中运行应用程序后,我将无法再构建项目。而是显示错误:错误MSB3027无法将“ obj \ Debug \ netcoreapp2.2 \ Housters.Web.dll”复制到“ bin \ Debug \ Housters.Web.dll”。重试计数超过10。失败。该文件被锁定:“ IIS工作进程(15496)”。IIS使用的是ASP.NET Core Web应用程序的dll,因此我实际上无法更新代码并进行构建,这很棒。解决方法是回收我的IIS应用程序池,但是当您需要在每次重建之前执行此操作时,此方法很快就会变旧。
  • 附加到w3wp.exe进程不会导致命中任何断点,因此我无法在IIS下进行调试(IIS Express调试工作正常。)
  • 我在launchSettings.json中配置的启动配置文件将被忽略。例如,当我选择我的IIS启动配置文件(具有“ http:// localhost ”作为launchUrl和applicationUrl)时,如果我按F5或Ctrl + F5,它将在浏览器窗口中打开“ http:// localhost:62551 / ” 。

因此,这就引出了一个问题,其他人如何在其本地开发机器上开发/运行/调试他们的ASP.NET Core应用程序?也许大多数Web开发人员已经从ASP.NET转移到了纯粹的javascript框架(如Angular,React和Vue),所以我不走运吗?还是我缺少使ASP.NET Core开发的痛苦减轻一些的东西?

Pie*_*ier 0

目前,ASP .NET Core 的体验相比过去有了很大的提升。

然而,某些问题仍然存在。对于 IIS Express(在生产中我们使用 Kestrel),您可以使用 Visual Studio 2017 和 2019 尝试以下操作(它们对我们有用):

如果我使用 F5 启动应用程序(以启用调试),那么一旦我停止调试,浏览器窗口就会关闭,因此每次更改任何代码后我都必须在主页上重新开始。

只是不要使用该页面:让选项卡/页面打开,生成另一个选项卡/页面并使用后者进行调试。这样您的会话将与生产环境相似。我们将 Firefox 作为默认浏览器,但通常使用 Chrome 进行调试,因此,不接触 Visual Studio 生成的进程可以使 IIS Express 保持活动状态。

如果我使用 Ctrl + F5 启动应用程序(无调试),经过几次重建后,网站似乎死掉了,这意味着任何新页面请求都只是说找不到主机。然后我必须再次按 Ctrl + F5 才能再次启动,但随后我又回到了主页。

似乎将整个解决方案清洗两次就可以解决问题(至少对我们来说)。第一次清理解决方案时,IIS Express 仍为该站点提供服务。显然,这应该是设计的方式(找不到相关的文档)。

如果这不起作用,则可能会发生 Visual Studio 服务被卡住的情况。在这种情况下,关闭 Visual Studio(我知道,这很痛苦),稍等一下,并dotnet.exe在验证它们是 Visual Studio 的一部分后杀死所有当前正在运行的程序。

Visual Studio 2019 有时决定在新选项卡上的现有 Chrome 窗口中启动网页,但有时决定在全新的 Chrome 窗口中启动该网页。经过几分钟的开发后,我只剩下多个选项卡和窗口打开。

这部分是我之前所说的。尽管痛苦且资源昂贵,但打开多个窗口可以让我们生存。

作为参考,我们在调试和发布时使用完全相同的配置(使用 kestrel)。