如果项目未设置为使用 IIS Express 启动,则 OWIN 不会启动

OWIN not firing up if project not set as Startup with IIS Express

我在 VS2013 中有一个解决方案,设置如下:

这两个项目都有默认的 url 指向它们的 own localhost:portX (我使用的是 IIS Express),所以 App.Web 是在 localhost:2222 上监听,APP.Web.API 在 localhost:3333 上监听。

我设置了 App.Web.API 以使用 OWIN,并添加了包 Microsoft.Owin.Host.SystemWeb 用于 IIS 中的自动启动。

我在OWIN启动的配置方法中下了一个断点class。

当我在 VS2013 中将 APP.Web.API 设置为 "startup project" 时,命中断点。

但是一旦我将 App.Web 设置为 "startup project" 然后我从浏览器向 App.Web.Api 发出请求,启动时的断点class 没有被击中了。

我尝试遵循在网上找到的一些建议(清理 IIS 临时文件、使用 OWIN 属性等),但它不起作用。

似乎只有在包含 OWIN 的项目被设置为启动项目时,IIS Express 才会启动。

有人可以解释发生了什么吗?

您的解决方案中只能有一个项目 "Set as StartUp project"。此项目将作为您应用程序的起点,您可以根据此项目调试您的应用程序"Start Point"。

当您将 App.Web.API 设置为您的启动项目时,您将能够在 Web Api.

的 Startup.cs 中调试您的应用程序

当您将 App.Web 设置为启动项目时,您将无法在 Web Api 项目的 Startup.cs 中调试您的应用程序,因为 Startup.cs 由您的 Web Api 项目触发,而不是您的 App.Web 项目。

红色断点按钮可以帮助您。如果您在 Startup.cs 中设置断点并启动 App.Web 项目,您会注意到断点具有透明颜色、警告符号和以下消息: "The breakpoint will not currently be hit. No symbols have been loaded for this document."。这意味着根据您的 "Start Point",无法获取此代码点。

因此,在您的情况下,当您从 App.Web 项目调试应用程序时,Web Api 方法可以正常工作,因为您已将项目附加到 IIS,并且 Startup.cs 被触发,但不是由您的调试过程触发,这就是断点未触发的原因。