プリコンパイルされたASP.NETサイトでDLLが参照しているページを確認する方法
-
11-07-2019 - |
質問
プリコンパイル済みのASP.NET 2.0サイトを使用しています(つまり、Visual Studio 2005の「ビルド-> Webサイトの公開」機能を使用してサーバーにコピーしました)。通常非常に詳細なすべてのエラーをキャッチしてログに記録しますが、最近、他の情報なしで次のエラーを取得しています:
アセンブリをロードできませんでした 「App-Web-rp2eml-j」。それを確認してください ページにアクセスする前にコンパイルされます。
今、その 'App-Web-rp2eml-j'ファイルは、プリコンパイル済みサイト用に作成されたbinフォルダー内のdllであるはずです 。私の主な質問は、どのaspxページがそのdllを探しているのかをどのように確認すればいいですか?サイトを再公開し、さらにサイトを完全に消去して再公開しようとしましたが、問題は消えません。
問題をグーグルで検索するとき、このエラーメッセージに関するほとんどの回答は、IISが1.1ではなくASP.NET 2.0を使用するように設定されていることを確認することに重点を置いています。 これは私の問題ではありません。
注1:サイトはすべて機能しているようですが、明らかに(少なくとも)壊れたページが1つあり、見つけることができません。
注2:上記のファイル名にはダッシュではなくアンダースコアを使用する必要がありますが、SOのマークアップではアンダースコア間のテキストが斜体に変更されます。
解決
上記のdllはbinディレクトリに存在しますか?あなたはその部分を斜体にしたので、そうではないと思います。これは、エラーが一時ファイルフォルダー内のdllを参照していることを意味する場合があります。
この問題は、ASP.NET一時ファイルフォルダー内の1つ以上のdllが破損している場合に発生する可能性があります。仮想ディレクトリにあるdllに変更がない場合、ASP.NETはここでファイルを更新しないことがあります。サーバー上で時々発生します。
私の解決策は次のとおりです。
-
サーバー上のIISサービスを1分ほど停止します。
-
ASP.NET一時ファイルフォルダー(通常"%windir%\ Microsoft.NET \ Framework \\ Temporary ASP.NET Files \ MyApplicationName"に移動)に移動し、フォルダー内のすべてのファイルを消去します。
-
サイトを公開して、構成済みの仮想ディレクトリにアップロードします。
-
IISおよびその他のサービスを再起動します。
この単純な4ステップのプロセスは、過去に私にとって非常にうまく機能しており、試してみる価値があるかもしれません。
ただし、基本的な質問に答えるには、「リバースエンジニアリング」する方法が2つあります。 dll:
- ILDASMにロードし、含まれているクラスを確認します。
- リフレクターを使用して、dllに含まれるすべてのクラスファイルをフォルダーに保存します。
ただし、各dllに多くのクラスファイルが含まれている可能性があり、「どのASPXページがそのDLLを探しているか」についての手がかりがないため、これで問題が解決するかどうかは疑問です。
他のヒント
たぶん、Global.asaxイベントApplication_OnErrorを使用してエラーの詳細情報をキャッチできるため、スタックトレースを監視できます。