在VS 2017和IIS Express中调试多个ASP.NET Core项目

时间:2019-05-17 13:59:30

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

我花了两天时间尝试使此设置正常工作,但显然我还没有偶然发现过正确的设置组合。据我所知,这是可能的,但我无法使其正常工作。

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

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

solution properties

我还编辑了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似乎表明一切都在运行。

iis applications

我看过一些帖子,说applicationhostlaunchSettings之间的端口必须全部不同,但这无济于事。实际上,似乎IIS Express会重写applicationhost中的绑定信息以包含launchSettings中的端口号(如果它们不匹配)。我还尝试过在applicationhost中将API虚拟目录作为应用程序的子元素,但这也不起作用。我还进行了其他拼命的尝试,例如将项目移出流程并在applicationhost中创建了一个单独的站点,但是我要做的就是情况更糟。

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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

IIS Express确实不是为将一个项目作为虚拟应用程序运行到另一个项目而设计的,或者不打算将其作为虚拟应用程序运行:这更多的是一种高级托管方案,它只能使用完整的IIS。这并不是说您无法实现这一目标,但是如果可以的话,要达到目标还需要大量的工作和精力。

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

如果您确实想要单独的项目,那么我实际上建议您使用带有编排的容器,因为这将使您的开发工作变得更加轻松 并为开箱即用的高级部署方案准备好应用程序。最后,您仍然可以选择进行传统的IIS站点部署,但前提是您选择了传统的IIS站点部署,但是您也可以轻松选择在云或本地群集中运行。您需要做的就是安装适用于Windows的Docker。 VS中的容器工具实际上非常好,即使您对这些概念是全新的,也可以轻松使用它。