【问题标题】:Debug Multiple ASP.NET Core Projects in VS 2017 and IIS Express在 VS 2017 和 IIS Express 中调试多个 ASP.NET Core 项目
【发布时间】:2019-05-17 13:59:30
【问题描述】:

我花了两天时间试图让这个设置工作,但显然我还没有偶然发现正确的设置组合。据我所知,这应该是可能的,但我无法让它发挥作用。

我有 2 个 ASP.NET Core 2.2 项目。一个是提供静态资源的基本 Web 服务器,另一个是处理标准 REST 请求的 Web API 项目。很标准的东西。仅供参考,我很快还需要添加另一个 API 项目,但现在我只想让这个“简单”案例工作。

在解决方案属性中,我已经告诉 VS 启动这两个项目。

我还编辑了applicationhost.config 文件,将两者都作为虚拟目录包含在 IIS Express 中。我希望任何带有/api 的东西都可以转到 API 控制器项目,而其他任何东西都可以转到 UI(静态资源)项目。

<site name="Par.Web" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="C:\Source\repos\Par.Web\Par.Web.Ui" />
</application>
<application path="/api" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="C:\Source\repos\Par.Web\Par.Web.Api" />
</application>
<bindings>
    <binding protocol="http" bindingInformation="*:57730:localhost" />
</bindings>
</site>

我还编辑了每个项目的 launchSettings.json 文件,以在 iisSettings 中包含相同的 URL。

来自 UI 项目:

"iisSettings": {
  "windowsAuthentication": false,
  "anonymousAuthentication": true,
  "iisExpress": {
    "applicationUrl": "http://localhost:57730/",
    "sslPort": 0
  }

},

并且来自 API 项目:

"iisSettings": {
  "windowsAuthentication": false,
  "anonymousAuthentication": true,
  "iisExpress": {
    "applicationUrl": "http://localhost:57730/api/",
    "sslPort": 0
  }

},

当我运行解决方案时,我会从 UI 项目中获得响应,但任何 API 请求都会返回 404 错误。似乎 VS 没有启动第二个项目,因为我在 API 项目的输出窗口中也看不到任何内容。然而 IIS Express 似乎表明一切都在运行。

我看到帖子说applicationhostlaunchSettings 之间的端口必须都不同,但这并没有帮助。事实上,如果它们不匹配,IIS Express 似乎会重写applicationhost 中的绑定信息以包含来自launchSettings 的端口号。我还尝试使 API 虚拟目录成为 applicationhost 中应用程序的子元素,但这也不起作用。我还进行了其他不顾一切的尝试以使其实现某事,例如在进程外运行项目并在applicationhost 中创建一个单独的站点,但我所能做的就是让事情变得更糟.

正如我所说,我已经看过其他关于这样做的帖子,但我发现的所有内容都是针对旧版本的 Visual Studio(或 Visual Studio Code),或者这些项目不是 .Net Core。显然这些有所作为。

任何帮助将不胜感激。

【问题讨论】:

标签: visual-studio asp.net-core iis-express


【解决方案1】:

IIS Express 的设计或旨在将一个项目作为虚拟应用程序运行到另一个项目:这更像是一种高级托管方案,属于完整的 IIS。这并不是说你不能实现它,但如果可以的话,要实现它需要大量的工作和努力。

但是,我会质疑您为什么要这样做。拥有独立应用程序的全部意义在于使它们彼此独立。如果您打算像这样将 API 本质上绑定到 Web 应用程序,那么您最好将所有内容都放在一个项目中。同一个 ASP.NET Core 项目可以同时支持 API 端点和更传统的 Web 端点(MVC/Razor 页面)。

如果您确实想要单独的项目,那么我实际上建议使用带有编排的容器,因为这将使您的开发生活变得更加轻松并且让您的应用程序为高级部署场景做好开箱即用的准备。最后,您仍然可以选择进行传统的 IIS 站点部署,如果这是您的选择,但您也可以轻松地选择在云或本地集群中运行。您需要做的就是为 Windows 安装 Docker。 VS 中的容器工具实际上相当不错,即使您对这些概念不熟悉,也可以轻松上手。

【讨论】:

  • 感谢您的评论。你是对的,这些可能是单个应用程序(除了 UI/API 关注点分离)。但我很快将需要添加另一个由我的 Web 应用程序共享的 API 项目以及由另一个开发人员维护的移动应用程序。所以我最终还是需要弄清楚这一点,至于容器——这就是最初的架构方式,但被击落的权力。
  • 就像我在回答中所说的那样。在开发中使用本地容器并不规定特定的部署策略。您仍然可以随心所欲地进行部署。您可以为自己使用容器,并且仍然可以对 IIS 进行 Web 部署或其他任何操作。完全可行。然后,如果您最终能够说服管理层进行容器化部署,那么您就已经领先了。
猜你喜欢
  • 2021-01-24
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多