1

ASP.NET アプリケーションに問題があります。デバッグモードを無効にすることなく、約1年ほど開発されています。デバッグなしで動作するかどうかをテストしたかったのですが、動作しませんが、debug="true" を設定すると正常に動作します。

初めてアプリケーションを開こうとすると、「サーバーが利用できません」というエラーが表示されます。イベント ログに 2 つのエラーがあります。

  1. .NET ランタイム 2.0 エラー - アプリケーション aspnet_wp.exe、バージョン 2.0.50727.3082、スタンプ 492b8702、モジュール kernel32.dll、バージョン 5.1.2600.3119、スタンプ 46239c44、デバッグでエラーが発生していますか? 0、障害アドレス 0x00012a5b。
  2. ASP.NET 2.0.50727.0 - プロセス aspnet_wp.exe の予期しない終了 (PID: 4932) (少し異なるように記述されている可能性がありますが、翻訳されています)。

IIS のバージョンは、Windows XP で実行されている 5.1 です。

どんな提案にも感謝します。

更新: デバッグ モードの変更は web.config で行われます

4

7 に答える 7

8

あなたが説明しているクラッシュは、kernel32.dll で発生しています。これは、これがマネージ コード内のクラッシュではなく、.NET エンジン自体 (うーん) のクラッシュであることを示している可能性があります。肯定的な結果は得られません(私見)。

「バイナリ検索」(犯人の場合)でこの問題を解決することをお勧めします:-)。最初の "反復" として、単純な aspx ページ (/Test.aspx) を作成し、デバッグ モードを無効のままにして、ページにアクセスしようとします (コード ビハインドはなく、タイトルと Hello, world body を含む基本的な HTML のみ)。これにより、ASP.NET が IIS サーバーにインストールされ、正しく動作していることを確認できます。

この最も単純なページが再び失敗する場合は、コメントで @JSC が言及したことを正確に提案します。IIS に ASP.NET を再登録します。

rem (reregister ASP.NET in IIS)
rem (run as administrator!)
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i

最も単純なページが実行されたら、単純なコード ビハインドを追加して試してみます。コード ビハインドが実行されたら、アプリケーションの実際の開始ページを更新して、すべてのコード ビハインドを削除し、マークアップだけを残してページにアクセスしてみます。 . その後、初期化ロジックのみを追加してみます。様子を見てください...

基本的に、アプリケーション内でクラッシュの原因となっている「何か」を見つける必要があります。マークアップ + コードビハインドなし = 動作、マークアップ + すべてのコードビハインド = クラッシュ。二分探索の「アプローチ」では、コードの半分が有効になります。まだ表示されるかどうかを確認してください (現時点では機能について心配していません。もちろん、期待どおりに動作しません)。表示されない場合は、前半の後半を無効にして (つまり、コードの 4 分の 1 のみがアクティブになります)、それを試してください。検索を問題のある領域に限定するまで続けます...

私がお勧めする別のアプローチは、サーバー 2003 (IIS6) / サーバー 2008 (IIS7) を仮想マシン (VirtualPC、VMWare、VirtualBox) にインストールすることです (サーバー イメージの MSDN ダウンロードにアクセスできない場合は、いつでも試用版をダウンロードできます - Server 2008 の試用版は、60 日間と 2 回の「リセット」が有効です)。クリーンな OS を仮想マシンにインストールしたら、アプリケーションをデプロイして、その環境での動作を確認してください。

于 2009-03-03T13:22:39.287 に答える
3

非デバッグ コードを含むアサートに対してコードをチェックすることをお勧めします。次のようなコードを書くよくある間違いを数回行いました。

アサート (doSomeCrucialOperation());

リリース モードでコンパイルすると、操作の呼び出しを含む Assert 全体がコンパイルされません。

于 2009-02-27T17:11:00.317 に答える
3

デバッグ環境をチェックする条件付きコードがないことを確認してください。私はかつて、ランダムなクラッシュバグを追跡するために何日も費やしました...そして最終的に次のようなものに出くわしました:

#ifdef DEBUG
  threadPoolCount = 1;
#else
  threadPoolCount = 16;

何だと思います...それはスレッドのバグでした! C# では、次のようになります。

[Conditional("Debug")]
于 2009-02-27T17:53:34.160 に答える
0

一時DLLをクリアしてみてください

iisreset /stop
del "%windir%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\*.*" /s/f
iisreset /start

管理されていないリソースを適切に解放していることを確認してください。USING と .Dispose を使用します。

于 2009-03-07T05:57:27.030 に答える