14

同じ問題に投稿された他の多くの質問を読みましたが、原因とそれを防ぐ方法をまだ理解していません.

私の場合、これは本番サーバーで発生します。他の質問で説明されているのと同じエラーが発生し、アセンブリを bin ディレクトリに再コピーして解決します。それらは再コンパイルされたファイルではなく、以前にそこにあったものと同じです-再びコピーされ、問題なく動作し始めます。

奇妙な部分は、Web 配置プロジェクトを使用して、すべてのアセンブリ ファイルの名前をフォルダー ベースの dll に変更していることです。そのため、App_Web_jt8nxllz.dll の代わりに folder.dll と folder.subfolder.dll を使用します。それでも、エラーはまだ元の App_Web_jt8nxllz.dll ファイルに名前を付けています。

C:\WINDOWS\Microsoft.NET\Framework[64]\v...\Temporary ASP.NET Filesフォルダの内容を削除しても問題ありませんが、このエラーが発生しないようにする方法を知っている人はいますか? また、IIS をシャットダウンしたり再起動したりすることは、運用サーバーで発生している場合、実際にはあまり現実的ではありません。おそらく、スケジューラーの一時フォルダーを自動的に消去しますか?

ここで本当の問題は何ですか?これが起こる原因は特にありますか?サイトはまったく問題なく動作しますが、突然、1 つのフォルダー全体が機能しなくなり、このエラーが発生します。

Could not load file or assembly 'App_Web_jt8nxllz, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
Exception type 'System.IO.FileNotFoundException' was caught.
Source: App_Web_whv5zsvd
Target Site: Void __BuildControlTree(ASP.artists_controls_artistheader_ascx)
Stack Trace:
   at ASP.artists_controls_artistheader_ascx.__BuildControlTree(artists_controls_artistheader_ascx __ctrl)
   at ASP.artists_controls_artistheader_ascx.FrameworkInitialize()
   at System.Web.UI.UserControl.InitializeAsUserControlInternal()
   at System.Web.UI.UserControl.InitializeAsUserControl(Page page)
   at ASP._artists_artist_master.__BuildControlctlArtistHeader()
   at ASP._artists_artist_master.__BuildControlctlContent(Control __ctrl)
   at System.Web.UI.CompiledTemplateBuilder.InstantiateIn(Control container)
   at ASP.master_mysite_master.__BuildControlMainContent()
   at ASP.master_mysite_master.__BuildControlform1()
   at ASP.master_mysite_master.__BuildControlBody()
   at ASP.master_mysite_master.__BuildControlTree(master_mysite_master __ctrl)
   at ASP.master_mysite_master.FrameworkInitialize()
   at System.Web.UI.UserControl.InitializeAsUserControlInternal()
   at System.Web.UI.MasterPage.CreateMaster(TemplateControl owner, HttpContext context, VirtualPath masterPageFile, IDictionary contentTemplateCollection)
   at System.Web.UI.MasterPage.get_Master()
   at System.Web.UI.MasterPage.ApplyMasterRecursive(MasterPage master, IList appliedMasterFilePaths)
   at System.Web.UI.Page.ApplyMasterPage()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
4

3 に答える 3

8

私のサイトをリンクするだけではありませんが、私はこの問題に遭遇し、このトピックに関するブログ投稿を書きました. このトピックに関する詳細情報へのリンクがあります。しかし、ここで要約すると、詳細は次のとおりです。

問題:

Web サイトは、カスタム Web コントロールを読み込もうとしてエラーをスローしています。前回のリリースでは、必要に応じて表示される別のカスタム Web コントロールに新しいカスタム コントロールを追加しました。一番外側/親コントロールと新しい子コントロールはソース内の別個のコントロールであるため、.Net Framework がこれら 2 つのコントロールの 1 つをコンパイルし、同時に他のコントロールを再コンパイルしない場合、古いものになります。ファイルが古いバージョンのアセンブリを参照しようとしています。.Net フレームワークがコンパイル時にランダムな文字列をアセンブリの名前に追加するという事実により、新しくコンパイルされたファイルの名前と以前のバージョンのファイルがファイル名の不一致を引き起こし、したがって外部/親コントロールがもはや存在しないファイル。

考えられる回避策または一時的な修正:

1) web.config ファイルでコンパイル タグのバッチ プロパティを false に設定する

<compilation debug="false" batch="false" />

numRecompileBeforeAppRestart2)プロパティで設定することで、発生する頻度を減らすこともできます。

<compilation debug="false" numRecompilesBeforeAppRestart="50" />

詳細については、KB 記事 934839を参照してください。

問題が発生した後の修正:

1) 一時 ASP.Net ファイルを削除します (これにより、サイトがダウンします)。

2) 親/外部コントロールにコード ファイルの再コンパイル、編集、および保存を強制します。これは、Web サイトをダウンさせないため、#1 よりも優れた修正オプションです。

私のおすすめ:

1) まず、上記の一時的な修正 #1 を適用する必要があると思います。これにより、将来のすべての問題を防ぐことができ、必要な唯一の答えになる可能性があります。

2) 次に、Microsoft から 934839 ホットフィックスをダウンロードして QA 環境にインストールし、問題が発生しないことを確認します。QA でホットフィックスをしばらくテストした後、ホットフィックスをインストールして、この問題を恒久的に修正します。この時点で、#1 の一時的な作業を削除できます。

注: 一時的な修正 #1 を適用した後、問題は再発していません。この修正を 12 か月以上行っていますが、すべて問題ありません。

于 2009-08-09T06:19:19.217 に答える
3

私はこれに見舞われました。修正プログラムがあります。

http://weblogs.asp.net/scottgu/archive/2007/04/11/public-hotfix-patch-available-for-asp-net-compilation-issues.aspx

新しいマシン/セットアップではもう発生しませんが。

于 2009-04-24T04:35:46.407 に答える
0

一時ファイルを消去したり、web.config を変更したりしてもうまくいきませんでした。私にとって、それを修正したのは、コンピューターを再起動することでした。

于 2016-08-17T13:26:08.817 に答える