ChatGPT解决这个技术问题 Extra ChatGPT

OwinStartup 未触发

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

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

[assembly:OwinStartup(typeof(WebApplication.Startup))] 

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

<add key="owin:AutomaticAppStartup" value="true" />

我还尝试专门调用 appSetting:

<add key="owin:appStartup" value="WebApplication.Startup" />

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

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

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

更新

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

您是否在此应用程序中安装了 Microsoft.Owin.Host.Systemweb 包。确保这个 dll 也是 bin 文件夹的一部分?
就是这样。非常感谢。我认为发生的事情是我在某些时候使用 Resharper 删除了未使用的引用,它认为不需要一个。如果您想将此作为答案,我肯定会将其标记为解决方案。谢谢您的帮助。
Jeff,ReSharper 删除了对 Microsoft.Owin.Host.Systemweb 的“未使用”引用-您是在谈论“使用”声明吗?在哪个文件中,Startup.cs?
我遇到了完全相同的问题,resharper 删除了对 Microsoft.Owin.Host.SystemWeb 的引用。我通过在 Visual Studio 中打开包管理器控制台窗口并运行以下命令来修复它 PM> Update-Package -reinstall Microsoft.Owin.Host.SystemWeb
作为上述@JoeKing 评论的更新。 PM 控制台不会更新为“未找到”。我不得不去重新安装。 PM> 安装包 Microsoft.Owin.Host.SystemWeb

U
Uwe Keim

确保您已在项目中安装 Microsoft.Owin.Host.SystemWeb 包。 IIS 托管应用程序中的启动检测需要此包。有关详细信息,您可以参考 this article


假设我们有一个地方可以调用它(PreApplicationStartMethod),而不需要这些 Microsoft.Owin 内容的直接引用,那么某人如何以编程方式在消费/owin 封装库中启动 Owin 启动检测?我们如何专门挑起 Katana 呼叫 Startup.Configuration(IAppBuilder)
尝试从头开始创建应用程序,而不使用 MVC 模板。这结束了2小时的绝望。
就在我大喊 resharper 是最大的生产力杀手时,我遇到了这个问题,并且一周都无法弄清楚为什么 web api 停止工作。另一个证明 reshaper 正在扼杀我的生产力。
要求引用一个在编译期间没有真正使用的库是微软的一个糟糕的设计! Resharper 正在尽力而为,但没有任何武器可以对付这种糟糕的决定。
惊人。每次我添加 OWIN 启动文件时都会遇到这个问题。每次我忘记为什么,并最终得到这个答案。
S
Simon_Weaver

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

  <add key="owin:AutomaticAppStartup" value="false" />

在您的 web.config 中。它将禁止调用启动逻辑。

而是将其更改为 true

  <add key="owin:AutomaticAppStartup" value="true" />

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

在某个地方——当我升级到 MVC 5 时,它被添加了,直到今天我才看到它。


在旧的 mvc 项目中实现 Owin 启动类时遇到了同样的问题。切换值就可以了!
A
Aaron Sherman

讨论的原始问题的替代答案 - Owin“不射击”。就我而言,我花了几个小时认为它没有触发是因为无法在其中设置断点。

在 Visual Studio 中调试 OWIN 启动时

IIS Express - 运行“F5”将中断 OWIN 启动代码

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


你说的对!它只是 Visual Studio 2013 调试器没有在 Startup 类内的断点处停止 - 在本地 IIS 下运行时。诡异的。
您能否详细说明“附加到 W3P.exe”?我有同样的问题,即断点没有被 IIS 击中,但被 IISExpress 击中。我已经停止了应用程序,附加到 w3wp.exe,然后浏览到我的本地主机,但它仍然没有被击中。我错过了什么吗?
我也无法附加到我的应用程序的运行实例,尽管我相信我以前能够这样做。我尝试在浏览器中打开一个应用程序,然后在 VS2013 中使用“调试-> 附加到进程”,然后在浏览器中重新加载页面。 VS没有停下来。我知道 OWIN Startup 正在执行:我将一些日志记录放入其中以进行调试。这就像回到中间调试打印的黑暗时代。
一位同事刚刚向我展示了在 iis 中,如果您双击默认应用程序池并将托管管道模式更改为经典,调试器将在启动时中断。在那之后我跑了,得到一个错误,说应用程序必须在集成中运行,所以我不得不把它改回来,但至少能够看到它在那里坏了。
这里有几件事。 “w3wp.exe”基于应用程序池。如果您的应用程序不是您请求启动该进程的第一个应用程序,您应该能够调试 global.asax 和 owin。即在应用程序池中请求不同的应用程序,“附加到 w3wp.exe”,然后请求您尝试调试的应用程序。
R
Remotec

如果您在调试 Startup 类中的代码时遇到问题,我也遇到了这个问题 - 或者我以为我遇到了。代码正在触发,但我相信它发生在调试器附加之前,因此您无法在代码上设置断点并查看发生了什么。

您可以通过在 Startup 类的 Configuration 方法中引发异常来证明这一点。


这正是正在发生的事情。附加调试器后是否有解决方案让 Startup 类触发?
我可以知道如何在配置方法中抛出异常吗?
将这一行添加到 Startup.cs 以证明它已执行: System.IO.File.WriteAllText(@"c:\temp\startup.txt", "Started");
@Karthikeyan - 在 ConifureAuth(app); 之前(没关系)添加这一行;行 - 抛出新异常(“你好”);
制作第一行 System.Threading.Sleep(10_000) 以便在继续之前等待足够长的时间让调试器附加(根据需要进行调整)
R
Rasmus

调试技巧

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

使用本地 IIS

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

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

额外小费

也许这样做会刷新缓存:

在 web.config 中添加带有 false 值的 optimizeCompilations 属性 运行站点 撤消 web.config 中的更改


切换设置 optimizeCompilations="false" 对我有用
你拯救了我的一天! optimizeCompilations="false" 为我工作。
optimizeCompilations 拯救了我的一天。谢谢 :)
r
randomsolutions

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


仅供参考,这是另一个答案,提供了有关这些文件的存储位置的更多详细信息:stackoverflow.com/questions/16137457/…
我运行 IIS EXPRESS 和窗口 8:在此处删除:C:\Users\Your User Name\AppData\Local\Temp\Temporary ASP.NET Files\vs
谢谢,我注意到了这个答案,因为在此之前我有一个错误,关于锁定临时 ASP.NET 文件文件夹中的文件
我为此苦苦挣扎了一整天,最后这对我有用。清除 Temporary ASP.NET Files 文件夹内容并调用 Owin 启动后。
U
Ufuk Hacıoğulları

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

update-package Microsoft.Owin.Host.SystemWeb -reinstall

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

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


我已经为此奋斗了一段时间,这就是解决我的问题的原因。我在 packages.config 中有 nuget 参考,但我的 csproj 没有参考。
就我而言,我根本没有安装软件包。运行 install-package Microsoft.Owin.Host.SystemWeb 解决了我的问题。感谢您的提示。
J
James Rapson

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

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

   ...

</assemblies>

删除程序集=“*”是导致问题的原因。当我删除这一行时,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>

我有一个 sitecore 项目,在我的 web.config 文件中,没有 标签。但是添加 解决了我的问题。
谢谢@burki,因为你的评论,我强迫自己尝试这个解决方案,它也对我们有用!自 VS 更新到 15.9.9 以来,Owin 启动类没有触发。
太感谢了!这解决了它,我必须添加以下内容: < /组件>
A
Ashutosh B Bodake

在我的情况下,这个 Microsoft.Owin.Host.SystemWeb 包存在于项目中。

但以下两个标签在 web.config 中不存在。

<add key="owin:AutomaticAppStartup" value="true" />
<add key="owin:appStartup" value="namespace.className.methodName" />

添加它们后,它工作顺利。


A
Adam Prescott

就我而言,IIS 应用程序池未设置为 v4。这是v2。

将 AppPool 更改为 v4,一切正常。


s
sirdank

就我而言,我的 web.config 有

<authorization>
  <allow users="?" />
</authorization>

为了迫使它回到欧文,我需要它是

<authorization>
  <deny users="*" />
</authorization>

对我来说,没有任何允许用户,但设置为拒绝解决了问题
S
Sean Song

就我而言,我的网站的输出路径被某人更改了,IIS Express 甚至没有加载 OWIN,当然安装程序类也不会被命中。在我将输出路径设置为“bin\”后,它运行良好。


W
WWC

我发现以下文章非常有帮助:

https://weblog.west-wind.com/posts/2015/Apr/29/Adding-minimal-OWIN-Identity-Authentication-to-an-Existing-ASPNET-MVC-Application#MinimalCodeSummary

在我的情况下,我必须在 Owin 身份验证而不是 Windows 身份验证之前设置以下内容:

<system.web>   
    <authentication mode="None" />   
<system.web>

A
Andrew Gale

这对我有用:

添加认证模式=“无”

<system.web>
    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime targetFramework="4.6.1" />
      <authentication mode="None" /><!--Use OWIN-->
  </system.web>

n
niki b

我不确定这是否仍会帮助某人,但我已经完成了上述所有解决方案(以及其他一些帖子),但无济于事。

解决我的问题的方法是在 web.config 中的 RedirectUri 值末尾添加一个反斜杠(我知道,这太疯狂了!)。 RedirectUri 是 UseOpenIdConnectAuthentication 中的一个参数。

所以,而不是:

<add key="ida:RedirectUri" value="https://www.bogussite.com/home" />

做这个:

<add key="ida:RedirectUri" value="https://www.bogussite.com/home/" />

并更新了 Azure 应用设置上的回复 URL。

这以某种方式使启动按预期运行(可能清除了一些缓存),并且断点现在正在触发。

供参考。我从这里建模我的代码:https://github.com/microsoftgraph/aspnet-connect-sample


F
Frederik Struck-Schøning

converting a class library to a Web Application Project之后,我遇到了这个并变得固执。结果,在我的 .csProj 文件中,我有这个:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  <DebugSymbols>true</DebugSymbols>
  <DebugType>full</DebugType>
  <Optimize>false</Optimize>
  <OutputPath>bin\Debug\</OutputPath>
  <DefineConstants>DEBUG;TRACE</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <DebugType>pdbonly</DebugType>
  <Optimize>true</Optimize>
  <OutputPath>bin\Release\</OutputPath>
  <DefineConstants>TRACE</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
</PropertyGroup>

从而将各种 dll 构建到 bin 文件夹的子文件夹中(ifc. 不起作用)。解决方案是将 OutputPath 的两个文本内容都更改为 bin\。


F
Fábio Carvalho

对我来说,这是因为它们不在同一个命名空间中。在我从“project.Startup.AppStart”中删除我的 AppStart 并让它们都具有“project.Startup”命名空间的 Startup.cs 和 Startup.Auth.cs 后,一切都恢复正常。

我希望它有帮助!


p
pmb5

如果您在 IIS 托管中看到此问题,但在 F5 调试时没有,请尝试在 IIS 中创建新应用程序。

这为我修好了。 (Windows 10)最后我删除了“坏”的IIS应用程序并重新创建了一个具有相同名称的相同应用程序。


J
JoeHz

我认为有些人试图达到的目的是,如果您想以编程方式使您的 OWIN 服务器“栩栩如生”,您将调用如下内容:

using Microsoft.Owin.Hosting;

    IDisposable _server = WebApp.Start<StartupMethod>("http://+:5000"); 
              // Start Accepting HTTP via all interfaces on port 5000

进行此调用后,您将在调试器中看到对 StartupMethod() 的调用


x
xtds

如果您的解决方案中有多个主机使用相同的命名空间,请确保将它们放在单独的 IISExpress 端口上(并删除 .vs 文件夹并重新启动 vs)。


A
Anthony De Souza

我在这篇文章中提出了很多建议。

我有以下但仍然无法降落在断点上。抛出异常证明正在输入代码。

<appSettings>
...
  <add key="owin:AutomaticAppStartup" value="true" />
  <add key="owin:appStartup" value="SSOResource.Startup, SSOResource" />
...
</appSettings>

最后出于绝望,我查看了项目-> 属性,然后在 WEB 部分下,我还检查了 NATIVE CODE 复选框(应该已经检查了 ASP.NET)。

这终于为我解决了。

注意:我使用的是 Visual Studio 2017 Professional。


V
Venkatesh Prabu

首先添加 OWIN Auth 类,然后在 web.config 中启用 OWIN:AutomaticAppStartup 键,就像现在它会触发一样


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅