【问题标题】:Easiest way to run/debug ASP.NET Core app运行/调试 ASP.NET Core 应用程序的最简单方法
【发布时间】:2019-09-26 16:47:35
【问题描述】:

我刚刚将我的 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") 的正确值。 Visual Studio 喜欢在我每次构建或运行我的应用程序时注入 aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%",尽管我的 .csproj 中有 IsTransformWebConfigDisabled = true。所以我必须经常进入 git 并恢复这些更改,否则我的应用程序将退回到可怕的 ANCM In-Process Handler Load Failure 页面。
  • 假设 Web.config 具有正确的值,在浏览器中运行应用程序后,我无法再构建项目。相反,它给出了错误:错误 MSB3027 无法将 "obj\Debug\netcoreapp2.2\Housters.Web.dll" 复制到 "bin\Debug\Housters.Web.dll"。重试次数超过 10。失败。该文件被“IIS Worker Process (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 开发不那么痛苦的东西?

【问题讨论】:

标签: asp.net asp.net-core


【解决方案1】:

目前,与过去相比,使用 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(我知道,这很痛苦),稍等片刻,在验证它们是 Visual Studio 的一部分后,将当前运行的所有 dotnet.exe 杀死。

Visual Studio 2019 有时会决定在我现有的 Chrome 窗口中的新标签页中启动网页,但有时会决定在全新的 Chrome 窗口中启动它。经过几分钟的开发后,我打开了多个选项卡和窗口。

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

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

【讨论】:

    猜你喜欢
    • 2016-07-17
    • 2011-09-08
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多