OwinStartupが起動しない


350

OwinStartup構成コードが完全に機能し、その後機能しなくなりました。残念ながら、動作を停止させるために何をしたのか正確にはわかりませんし、それを理解するのに本当に苦労しています。

基本事項が網羅されていることを確認するために、

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

属性が適切に割り当てられており、falseに設定されているowin:AutomaticAppStartupのappSettingがないことを確認しました。

<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テンプレートでそれをテストしましたが、そこで機能するため、それが原因ではないと思います。

また、スタートアップクラスを削除し、Visual Studioを使用して、[新しいアイテムの追加]でOWINスタートアップクラスタイプを使用して新しいクラスを追加しようとしましたが、これも呼び出されません。次に、2つ以上のOwinStartup属性が定義されている場合に例外がスローされることがわかっているため、2番目のスタートアップクラスを追加しようとしましたが、そこに例外はスローされません。

他に何を試すべきかわからない。何かご意見は?

更新

Resharperを使用してMicrosoft.Owin.Host.SystemWebへの参照を削除したところ、未使用の参照を削除したことがわかりました。


37
このアプリケーションにMicrosoft.Owin.Host.Systemwebパッケージがインストールされていますか。このdllがbinフォルダーの一部でもあることを確認しますか?
Praburaj 2013年

1
それだけでした。本当にありがとう。何が起こったのかと思いますが、ある時点で未使用の参照を削除するためにResharperを使用したため、参照が必要だとは思われませんでした。これを答えにしたい場合は、間違いなくそれを解決策としてマークします。助けてくれてありがとう。
Jeff Treuting 2013年

2
ジェフ、ReSharperはMicrosoft.Owin.Host.Systemwebへの「未使用」の参照を削除しました-「使用」ステートメントについて話しているのですか?どのファイル、Startup.cs?
vkelman 2014

4
私はまったく同じ問題を抱えていた、resharperはMicrosoft.Owin.Host.SystemWebへの参照を削除しました。Visual Studioでパッケージマネージャーコンソールウィンドウを開き、次のコマンドを実行して修正しましたPM> Update-Package -reinstall Microsoft.Owin.Host.SystemWeb
Joe King

1
上記の@JoeKingのコメントの更新として。PMコンソールが「見つかりません」として更新されませんでした。再インストールに行かなければなりませんでした。PM>インストールパッケージMicrosoft.Owin.Host.SystemWeb
Morvael

回答:


768

Microsoft.Owin.Host.SystemWebプロジェクトにパッケージがインストールされていることを確認してください。このパッケージは、IISがホストするアプリケーションでの起動検出に必要です。詳細については、この記事を参照してください


4
Microsoft.Owinのもののこれらの直接参照を必要とせずに、それを呼び出す場所(PreApplicationStartMethod)があると仮定して、消費された/ owinカプセル化ライブラリ内でOwinスタートアップ検出をプログラムによって開始する方法はありますか?カタナに電話をかけるよう具体的にどのように挑発しますStartup.Configuration(IAppBuilder)か?
Jason Kleban、2015年

7
MVCテンプレートを使用せずに、アプリケーションを最初から作成しようとしています。これは2時間の絶望を終えました。
mkvlrn 2015年

1
私がリシャーパーを叫んでいたとき、私はこの問題を抱えていた最大の生産性キラーであり、Web APIが機能しなくなった理由を1週間理解できませんでした。別の証拠再収集者は私の生産性を殺しています。
Ivan G.

5
コンパイル時に実際には使用されないライブラリを参照することを要求することは、Microsoftによる悪い設計です。リシャーパーは最善を尽くしていますが、そのような悪い決断に対する武器はありません。
ps_ttf

22
すごい。OWINスタートアップファイルを追加するたびに、この問題が発生します。そして、その理由を忘れるたびに、この答えにたどり着きます。
トビアス

70

古いMVCバージョンからアップグレードした場合は、

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

あなたのweb.config。起動ロジックの呼び出しを抑制します。

代わりに true

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

私はあなたがすでにこれについて述べたことに気づきますが、時々(私のような)人々は質問全体を読まずに単に答えにジャンプします...

どこかで-MVC 5にアップグレードすると、これが追加され、今日まで見たことがない。


古いmvcプロジェクトでOwinスタートアップクラスを実装するときに同じ問題がありました。値を切り替えるとうまくいきました!
Darxtar

これは私のために動作しますありがとう
Ghanshyam Singh

51

議論された元の問題に対する別の答え-Owinは「発砲しない」。私の場合、ブレークポイントを設定できなかったために発火していないと考えて何時間も費やしました。

Visual StudioでOWINスタートアップをデバッグするとき

  • IIS Express-"F5"を実行するとOWINスタートアップコードが壊れる

  • IIS- OWIN(およびglobal.asax)コードがロードされるまで、「F5」の実行中断しません。W3P.exeにアタッチすると、ステップインすることができます。


2
あなたが正しいです!ローカルIISで実行しているときに、Visual Studio 2013デバッガーがスタートアップクラス内のブレークポイントで停止しないだけです。変だ。
vkelman 2014

4
「attach to W3P.exe」について詳しく説明できますか?IISでヒットしないブレークポイントの同じ問題がありますが、IISExpressでヒットします。アプリケーションを停止し、w3wp.exeに接続してから、ローカルホストを参照しましたが、まだヒットしていません。私は何かを見逃しましたか?
ショーン

アプリの実行中のインスタンスにもアタッチできませんが、以前はアタッチできたと思います。ブラウザーでアプリを開こうとした後、VS2013で "Debug-> Attach to Process"を使用して、ブラウザーでページをリロードしようとしました。VSは止まりませんでした。OWINスタートアップが実行中であることを知っています。デバッグのために、ログにログを記録しました。これは、中間デバッグデバッグの暗黒時代に戻ったようなものです。
vkelman 2014

2
同僚は、iisでデフォルトのアプリプールをダブルクリックしてマネージパイプラインモードをクラシックに変更すると、デバッガーが起動時に中断することを示しました。その後実行し、アプリケーションを統合で実行する必要があることを示すエラーが発生したため、元に戻す必要がありましたが、少なくともそこで問題が発生していることがわかりました。
Matt Bodily 2017

ここにはいくつかの事柄があります。"w3wp.exe"はアプリケーションプールに基づいています。アプリケーションがそのプロセスを起動する最初に要求するアプリケーションでない場合は、global.asaxおよびowinをデバッグできるはずです。つまり、「w3wp.exeにアタッチ」というアプリケーションプール内の別のアプリケーションを要求してから、デバッグしようとしているアプリケーションを要求します。
Brett Caswell

26

のコードのデバッグに問題がある場合 Startupクラス、この問題も発生しています。コードは実行されていましたが、デバッガーがアタッチされる前に発生するため、コードにブレークポイントを設定して何が起こっているのかを確認できません。

これConfigurationは、Startupクラスのメソッドで例外をスローすることで証明できます。


これはまさに起こっていることです。デバッガーがアタッチされた後にスタートアップクラスを起動するソリューションはありますか?
Tom Schreck、2016

設定メソッドで例外をスローする方法を知っていますか?
Karthikeyan 2016年

1
次の行をStartup.csに追加して、実行されたことを証明します:System.IO.File.WriteAllText(@ "c:\ temp \ startup.txt"、 "Started");
RaoulRubin 2016

1
@Karthikeyan-ConifureAuth(app);の前(後でも構いません)の後にこの行を追加します。行-新しいException( "Hello");をスローします。
フランシスロジャース2016

最初の行をSystem.Threading.Sleep(10_000)にして、続行する前にデバッガが接続するのに十分な時間待機します(必要に応じて調整します)
James Gray

16

デバッグのヒント

デバッグが機能しない場合は、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の変更を元に戻します

2
設定トグルoptimizeCompilations="false"私のために作品を
barsh

あなたは私の日を救います!optimizeCompilations = "false"が機能します。
Vostrugin 2017年

optimizeCompilationsは私の日を救いました。ありがとう:)
ボグダン・ストヤノビッチ

13

これと同様の問題があり、一時ASP.NETファイルをクリアすると修正されました。これが誰かを助けることを願っています。


4
参考までに、これらのファイルの保存場所についてもう少し詳しく説明する別の回答を
Sam Storie

1
IIS EXPRESSとウィンドウ8を実行しています。ここで削除します。C:\ Users \ Your User Name \ AppData \ Local \ Temp \ Temporary ASP.NET Files \ vs
Grey Wolf

私は一時的なASP.NET Filesフォルダ内のファイルをロック何かについて、この1の前にエラーがあったのでおかげで、私はこの答えに気づいた
Elger Mensonides

私はこれに丸一日苦労していましたが、ようやくこれでうまくいきました。Temporary ASP.NET Filesフォルダーの内容をクリアすると、Owinの起動が呼び出されます。
厳しい

11

私も同じ問題を抱えていました。Microsoft.Owin.Host.SystemWebパッケージがインストールされましたが、インストール中にNuGetが何らかの理由でDLLを参照として追加できませんでした。プロジェクトにその参照があることを確認してください。そうでない場合は、再インストールしてみてください。

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

再インストール時に以下のようなエラーが発生しましたが、どういうわけかうまくいきました:

システムコールが失敗しました。(HRESULTからの例外:0x80010100(RPC_E_SYS_CALL_FAILED))


私はしばらくこれと戦っていました、そしてこれが私の問題を修正したものです。packages.configにnugetリファレンスがありましたが、csprojにはリファレンスがありませんでした。
Zackary Geers

1
私の場合、パッケージをまったくインストールしていません。インストールパッケージMicrosoft.Owin.Host.SystemWebを実行すると問題が解決しました。ヒントをありがとう。
J.ホーン

2

私の場合、IISアプリケーションプールはv4に設定されていません。それはv2でした。

AppPoolをv4に変更しましたが、すべて問題ありませんでした。


2

Owinを既存のWebプロジェクトに追加したときにも同じ問題が発生しました。私は最終的に問題がweb.configファイルの次の原因であることがわかりました。

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

   ...

</assemblies>

remove assembly = "*"が問題の原因でした。この行を削除すると、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>

1
sitecoreプロジェクトがあり、web.configファイルに<remove assembly = * "/>タグがありませんでしたが、<add assembly =" Microsoft.Owin.Host.SystemWeb "/>を追加すると問題が解決しました
burki

@burkiに感謝します。あなたのコメントのため、私は自分でこの解決策を試すように強制しましたが、それも私たちにとってはうまくいきました!Owinスタートアップクラスは、VSが15.9.9に更新されて以来、起動していませんでした。
David

どうもありがとうございます!これで修正されました。次のコードを追加する必要がありました:<assemblies> <remove assembly = "*" /> <add assembly = "myapplication" /> <add assembly = "Microsoft.Owin.Host.SystemWeb" /> <add assembly = "Microsoft.Owin.Security" /> <add assembly = "System.Web.Mvc" /> <add assembly = "System.Web.WebPages" /> <add assembly = "System.Web.Helpers" /> < / assemblies>
trykyn

1

私の場合、私のWebサイトの出力パスが誰かによって変更され、IIS ExpressはOWINをロードしません。もちろん、セットアップクラスはヒットしません。出力パスを "bin \"に設定すると、うまく機能します。


1

私の場合、このMicrosoft.Owin.Host.SystemWebパッケージはプロジェクトに存在します。

しかし、以下の2つのタグはweb.configに存在しません。

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

それらを追加した後、それはスムーズに動作します。


1

私の場合、私のweb.configには

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

強制的にOwinにフォールバックするには、

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

0

私はこの投稿の多くの提案をいじりました。

私は次のものを持っていましたが、それでもブレークポイントに着陸できませんでした。例外をスローすると、コードが入力されていることが証明されました。

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

最後に、必死でプロジェクト->プロパティを調べ、次にWEBセクションの下で、[ネイティブコード]チェックボックスもオンにしました(ASP.NETはすでにオンになっているはずです)。

これでようやく修正されました。

注:Visual Studio 2017 Professionalを使用しています。


0

これがまだ誰かを助けるかどうかはわかりませんが、私は上記のすべての解決策を(そして他のいくつかの投稿から)実行しましたが、役に立ちませんでした。

私の最後の問題を修正したのは、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


0

クラスライブラリをWebアプリケーションプロジェクト変換した後、私はそれに遭遇し、頑固になりました。私の.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-folderのサブフォルダーに構築します(ifc。は機能しません)。ソリューションの両方のテキスト内容を変更することだったOutputPathだけにbin\

0

私にとっては、それらが同じ名前空間にないためでした。AppStartを "project.Startup.AppStart"から削除し、Startup.csとStartup.Auth.csの両方に "project.Startup"名前空間を設定すると、すべてが正常に動作するようになりました。

お役に立てば幸いです。


0

IISホスティングでこの問題が発生しているが、F5デバッグでは発生しない場合は、IISで新しいアプリケーションを作成してみてください。

これで修正されました。(Windows 10)結局、「悪い」IISアプリケーションを削除し、同じ名前で同一のアプリケーションを再作成しました。


0

一部の人々が上記のことを達成しようとしていたのは、プログラムでOWINサーバーを「実現」する場合は、次のようなものを呼び出すことだと思います。

using Microsoft.Owin.Hosting;

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

この呼び出しを行うと、デバッガーでStartupMethod()が呼び出されるのがわかります。



0

これは私のために働きました:

認証モード「なし」を追加

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

-3

最初にOWIN認証クラスを追加してから有効にします OWIN:AutomaticAppStartupをます web.configでキーをします。 今それが発火します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.