[英]ASP.NET corrupt assembly “Could not load file or assembly App_Web_*”
我已經閱讀了同一個問題上發布的許多其他問題,但我仍然不明白原因以及如何防止它發生。
就我而言,這發生在生產服務器上。 我得到了其他問題中描述的相同錯誤,我通過將程序集重新復制到bin目錄來解決它。 它們甚至不是重新編譯的文件,它們與之前的文件相同 - 再次復制,然后它開始工作沒有問題。
奇怪的是,我正在使用Web部署項目將我的所有程序集文件重命名為基於文件夾的dll。 所以folder.dll和folder.subfolder.dll而不是App_Web_jt8nxllz.dll。 但該錯誤仍然命名原始的App_Web_jt8nxllz.dll文件。
刪除C:\\WINDOWS\\Microsoft.NET\\Framework[64]\\v...\\Temporary ASP.NET Files
夾的內容工作正常,但有誰知道如何防止此錯誤發生? 此外,當它在生產服務器上發生時,關閉IIS或重新啟動它實際上並不可行。 也許自動清理調度程序上的Temp文件夾?
這里真正的問題是什么? 有什么特別的東西會導致這種情況發生嗎? 該網站將毫無問題地嗡嗡作響,然后突然間,整個文件夾停止工作並產生此錯誤。
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)
不只是鏈接我的網站,但我遇到了這個問題,我寫了一篇關於這個主題的博客文章 。 看看它,它有鏈接到這個主題的更多信息。 但總結一下這里的細節是:
問題:
該網站在嘗試加載自定義Web控件時出錯。 您在上一版本中看到,我們向另一個根據需要顯示的自定義Web控件添加了一個新的自定義控件。 因為最外層/父控件和新的子控件是源中的單獨控件,當.Net Framework編譯這兩個控件中的一個並且不會同時重新編譯另一個控件時,您將有一個過時的文件試圖引用舊版本的程序集。 .Net框架在編譯時將隨機字符串附加到程序集名稱的事實新編譯文件的名稱和文件的先前版本導致文件名不匹配,因此外部/父控件正在查找文件不再存在。
可能的工作或臨時修復:
1)通過在web.config文件中將編譯標記的批處理屬性設置為false
<compilation debug="false" batch="false" />
2)您還可以通過numRecompileBeforeAppRestart
屬性設置來減少它發生的numRecompileBeforeAppRestart
:
<compilation debug="false" numRecompilesBeforeAppRestart="50" />
有關更多詳細信息,請參閱知識庫文章934839
已經發生的問題的修復:
1)刪除臨時ASP.Net文件(這會刪除網站)
2)強制父/外控制器重新編譯,編輯和保存代碼文件。 對於修復而言,這是比#1更好的選擇,因為這不會導致網站崩潰。
我的建議:
1)首先,我認為我們應該從上面實施臨時修復#1,這可能會阻止將來的所有問題,並且可能是我們需要的唯一答案。
2)其次,我將在QA環境中從Microsoft下載並安裝934839修補程序,以驗證它不會導致任何問題。 在QA中測試修補程序一段時間之后,我會安裝此修補程序以永久修復此問題。 這時我們可以刪除圍繞#1的臨時工作。
注意:在放置Temp修復#1后,我再沒有遇到問題。 我有這個修復已經超過12個月了,一切都很好!
我被這個打了,有一個修補程序。
雖然新的機器/設置不再發生這種情況。
清除臨時文件或更改web.config對我來說不起作用。 對我來說,修復它的原因是重啟我的電腦。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.