OwinStartup没有开火

Jef*_*ing 328 asp.net-mvc owin asp.net-mvc-5

我让OwinStartup配置代码完美运行,然后它停止工作.不幸的是,我不确定我做了什么让它停止工作并且很难搞清楚它.

为了确保我已经涵盖了基础知识,我加倍检查以确保我拥有

[assembly:OwinStartup(typeof(WebApplication.Startup))] 
Run Code Online (Sandbox Code Playgroud)

正确分配属性并确保我没有owin的appSetting:AutomaticAppStartup设置为false所以我将一个设置为true以保证安全,因为之前没有任何内容.

<add key="owin:AutomaticAppStartup" value="true" />
Run Code Online (Sandbox Code Playgroud)

我也尝试过专门调用appSetting:

<add key="owin:appStartup" value="WebApplication.Startup" />
Run Code Online (Sandbox Code Playgroud)

在它停止工作之前,我将Microsoft.Owin.Security NuGet包升级到2.0.2,所以我尝试将它们恢复到2.0.1(这很痛苦),但它没有改变任何东西.我在项目上安装了WebActivator并使用它来引导其他东西,但我已经在新的WebApplication模板上测试了它并且它在那里工作,所以我不认为那是罪魁祸首.

我还尝试删除我的Startup类并使用Visual Studio在Add New Item中使用OWIN Startup Class类型添加一个新类,并且也没有被调用.接下来我尝试添加第二个Startup类,因为我知道如果定义了多个OwinStartup属性它将抛出异常,但它没有抛出任何异常.

不知道还有什么可以尝试.有什么想法吗?

更新

事实证明Resharper在我用它删除未使用的引用时删除了对Microsoft.Owin.Host.SystemWeb的引用.

Pra*_*raj 727

确保您已Microsoft.Owin.Host.SystemWeb在项目中安装了包.IIS托管应用程序中的启动检测需要此程序包.有关更多信息,请参阅文章.

  • 惊人.每次我添加一个OWIN启动文件我都有这个问题.每当我忘记原因,并最终得到这个答案. (18认同)
  • 尝试从头开始创建应用程序,而不使用MVC模板.这结束了2个小时的绝望. (7认同)
  • 要求引用编译期间未真正使用的库是微软的糟糕设计!Resharper正在尽力而为,但没有武器来对付这样糟糕的决定. (5认同)
  • 假设我们有一个可以调用它的地方([PreApplicationStartMethod](http://msdn.microsoft.com/en-us/library/system),有人会如何以编程方式在一个耗尽/自我封装的库中启动Owin启动检测. web.preapplicationstartmethodattribute.aspx)),不需要这些Microsoft.Owin的直接引用?我们如何特别挑起Katana调用`Startup.Configuration(IAppBuilder)`? (4认同)
  • 就在我大喊 resharper 是最大的生产力杀手时,我遇到了这个问题,一个星期无法弄清楚为什么 web api 停止工作。另一个证明resharper正在扼杀我的生产力。 (2认同)

Sim*_*ver 61

如果您从较旧的MVC版本升级,请确保您没有

  <add key="owin:AutomaticAppStartup" value="false" />
Run Code Online (Sandbox Code Playgroud)

在你的web.config.它会抑制调用启动逻辑.

而是将其更改为 true

  <add key="owin:AutomaticAppStartup" value="true" />
Run Code Online (Sandbox Code Playgroud)

我意识到你已经提到了这一点,但有时人们(像我一样)不会阅读整个问题,只是跳到答案......

在某个地方 - 当我升级到MVC 5时,这已经添加了,直到今天我才看到它.


Aar*_*man 50

讨论的原始问题的替代答案 - 欧文"没有解雇".在我的情况下,我花了几个小时认为它没有因为无法在其中设置断点而被解雇.

在visual studio中调试OWIN启动时

  • IIS Express - 运行"F5"将破坏OWIN启动代码

  • IIS - 在加载OWIN(和global.asax)代码之后,运行"F5" 不会中断.如果您附加到W3P.exe,您将能够进入它.

  • 你能详细说明'附加到W3P.exe'吗?我有相同的断点没有被IIS命中但被IISExpress命中的问题.我已经停止了应用程序,附加到w3wp.exe然后浏览到我的localhost但仍然没有被击中.我错过了什么吗? (4认同)
  • 你是对的!只是Visual Studio 2013调试器没有在Startup类的断点上停止 - 在本地IIS下运行时.奇怪的. (2认同)
  • 一位同事刚刚告诉我,如果您在iis中双击默认应用程序池并将托管管道模式更改为经典,则调试器将在启动时中断。我在那之后跑了一个错误,说该应用程序必须在Integrated中运行,所以我不得不将其改回,但至少能够看到它在那里中断了。 (2认同)

Rem*_*tec 26

如果您在Startup课堂上调试代码时遇到问题,我也遇到了这个问题 - 或者我认为我做过了.代码正在解雇,但我相信它是在调试器附加之前发生的,因此您无法在代码上设置断点并查看发生了什么.

您可以通过ConfigurationStartup类的方法中抛出异常来证明这一点.


Ras*_*mus 14

调试技巧

如果调试不起作用,请尝试使用IIS Express或尝试使用以下方法进行本地IIS

使用本地IIS

由于某种原因,此方法可以调试此方法:

  1. 请求网页
  2. 附加到w3wp.exe进程
  3. 触摸web.config文件
  4. 请求网页

额外提示

也许这样做会刷新缓存:

  1. 在web.config中,使用false值添加optimizeCompilations属性

    <compilation debug ="true"... optimizeCompilations ="false">

  2. 运行网站

  3. 撤消web.config中的更改

  • 切换设置`optimizeCompilations ="false"`对我有用 (2认同)

ran*_*ons 12

我有一个类似的问题,清除临时ASP.NET文件修复它.希望这有助于某人.

  • 仅供参考,这是另一个答案,它提供了有关这些文件存储位置的更多详细信息:/sf/ask/1129622021/ (4认同)

Ufu*_*arı 11

我有同样的问题.已安装Microsoft.Owin.Host.SystemWeb软件包,但在安装过程中,由于某种原因,NuGet无法将dll添加为引用.确保您的项目具有该参考.如果没有,您可以尝试重新安装:

update-package Microsoft.Owin.Host.SystemWeb -reinstall
Run Code Online (Sandbox Code Playgroud)

我在重新安装时遇到了如下错误,但不知何故它有效:

系统调用失败.(来自HRESULT的异常:0x80010100(RPC_E_SYS_CALL_FAILED))


小智 5

当我将 Owin 添加到现有的 Web 项目时,我遇到了同样的问题。我最终发现问题是由于 web.config 文件中的以下内容造成的。

<assemblies>
  <remove assembly="*" />
  <add assembly="System.Web.Mvc" />
  <add assembly="System.Web.WebPages" />

   ...

</assemblies>
Run Code Online (Sandbox Code Playgroud)

删除程序集 =“*” 导致了问题。当我删除这一行时,Owin 启动代码就会运行。我最终将其更改为以下内容并且效果完美

<assemblies>
  <remove assembly="*" />
  <add assembly="Microsoft.Owin.Host.SystemWeb" />
  <add assembly="System.Web.Mvc" />
  <add assembly="System.Web.WebPages" />
  <add assembly="System.Web.Helpers" />
...
</assemblies>
Run Code Online (Sandbox Code Playgroud)

  • 我有一个 sitecore 项目,在我的 web.config 文件中,没有 &lt;remove assembly=*"/&gt; 标签。但是添加 &lt;add assembly="Microsoft.Owin.Host.SystemWeb" /&gt; 解决了我的问题。 (3认同)