1. ホーム
  2. asp.net

[解決済み] プリコンパイルされた ASP.NET ウェブサイト プロジェクトで、ファイルまたはアセンブリ App_Web_ * を読み込めなかった

2022-03-14 05:45:27

質問

ある特定のページでこの問題が発生し、修正方法がわかりません。 私はすでにいくつかのSO質問を見つけました(例えば ASP.NET 破損したアセンブリ "ファイルまたはアセンブリApp_Web_*"をロードできませんでした。 ファイルまたはアセンブリ App_Web_xxxxxx またはその依存関係の 1 つをロードできませんでした。 を参照)、その解決策を試しましたが、効果がありませんでした。

おさらいですが、私が試したのは以下の通りです。

  • セット batch="false" numRecompilesBeforeAppRestart="50" をweb.configに記述します。

  • このWebサイトをホストしているIISのWebサイトを再起動する

  • のASP.NET一時ファイルを消去しました。 %windir%\Framework64\v4.0.30319\Temporary ASP.NET Files

  • リプロイされた

...と、上記のどのような組み合わせでも良いのですが、効果がありません。VSからサイトを実行しようとしたときや、プリコンパイルなしでウェブサイトをデプロイしたときは、まったく問題なく動作しているのですが。

以下は、環境のスペックです。

  • プリコンパイルは、Web Deployment Projectで行っています。TFSでも私がプリコンパイルを行った場合でも、問題は解決しません。

  • .NETのバージョンは4.0.30319です。

  • AppPoolの設定です。パイプラインモードは.NET 4.0に統合されています。

を開くと、このようなエラーが発生します。 Customer.aspx :

Could not load file or assembly 'App_Web_qxcfa0wv, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

このページでは UserManagement.ascx にあります。 ~/Controls/UserManagement.ascx .

そのコントロールは、別のコントロールである UserDialog.ascx に配置されています。 ~/Controls/Dialogs/UserControl.ascx .

そして、最後のコントロールは ~/Controls/User.ascx のデータをカプセル化するものです。それ以上の依存関係はありません。

スタックトレースによると、エラーの発生箇所は UserDialog.ascx (その <%@ Control ... %> ディレクティブ)。

途方に暮れています。私の 推測 は、動作しない理由は ~/Controls/Dialogs/UserDialog.ascx は親フォルダにあるコントロールを必要とし、その結果、実行時に何らかの古い参照が発生します。最初のSOの質問の問題の説明のようなものです。

しかし、単に ~/Controls/User.ascx コントロールで使用されている別のコントロールで循環参照エラーが発生するからです。 ~/Control/UserDialog.ascx そのコントロールは、他のコントロールを登録していないにもかかわらず、です。ネームスペースの登録のみで 他のほとんどのコントロールで使用されています。

でも、循環参照とエラーは関係があると思うのですが、どうなんでしょうかね。依存関係グラフを描かない限りはね。

何か思い当たることはありますか?

ありがとうございました。

どのように解決するのですか?

Webプロジェクトに変換してください、マジで。これは、Webサイトのテンプレートでライブラリやユーザーコントロールを使用する場合に起こる既知の問題です。ここにまとめてみました。

ASP.NET: Webサイト対Webアプリケーションのプロジェクト

詳細はRick Strahlのブログ(コメントを読む)をご覧ください。

ASP.NET 2.0におけるページ継承の理解