2010-06-30 34 views
6

我有一個相當簡單的內部ASP.Net網站,每週大約加載一次Microsoft.Practices.EnterpriseLibrary.Data DLL。下面是異常消息:爲什麼我得到System.IO.FileLoadException:無法加載文件或程序集,大約每週一次在我的ASP.Net網站上?

注意
System.IO.FileLoadException: Could not load file or assembly 'Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Access is denied. 
File name: 'Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null' 
    at foobar.Intranet.Logic.Data.UserDB.SelectByUserName(String userName) 
    at foobar.Intranet.Logic.Info.User.ValidateUser(String userName) in F:\Development\foobar\foobar\foobar.Intranet.Logic\Info\User.cs:line 130 
    at Login.ValidateUser(String username, String password) in e:\foobar\foobar.Intranet\Login.aspx.cs:line 32 

=== Pre-bind state information === 
LOG: User = Unknown 
LOG: DisplayName = Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null 
(Fully-specified) 
LOG: Appbase = file:///E:/foobar/foobar.Intranet/ 
LOG: Initial PrivatePath = E:\foobar\foobar.Intranet\bin Calling assembly : foobar.Intranet.Logic, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null. 
=== 
LOG: This bind starts in default load context. 
LOG: Using application configuration file: E:\foobar\foobar.Intranet\web.config 
LOG: Using host configuration file: \\?\C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet.config 
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config. 
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind). 
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/foobar.intranet/668896d8/82d7e51c/Microsoft.Practices.EnterpriseLibrary.Data.DLL. 
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/foobar.intranet/668896d8/82d7e51c/Microsoft.Practices.EnterpriseLibrary.Data/Microsoft.Practices.EnterpriseLibrary.Data.DLL. 
LOG: Attempting download of new URL file:///E:/foobar/foobar.Intranet/bin/Microsoft.Practices.EnterpriseLibrary.Data.DLL. 
ERR: Failed to complete setup of assembly (hr = 0x80070005). Probing terminated. 

事情:

  • 一個簡單的IIS重置修復該問題。
  • 我們在單個網絡服務器上運行相同的代碼,沒有任何問題。然後,我們將該網站移至兩個新的負載均衡(使用粘性會話)Web服務器(全部三個Windows Server 2003 R2標準版SP1)。現在,每個負載平衡的Web服務器每週都會引發一次這種異常情況,而這種情況只是出乎意料。
    • 我能想到的唯一的主要區別是我在負載平衡的服務器上安裝了4.0 .NET框架。該網站仍然在ASP.NET 2.0下運行,所以我不知道這將是一個問題
  • 我已經配置索引服務不搜索「Temporary ASP.NET Files」文件夾,但它didn沒有幫助。
  • 我們使用我們網站上的Microsoft.Practices.EnterpriseLibrary.Data DLL。幾乎每一個頁面都使用我們的邏輯DLL,然後利用EnterpriseLibrary dll。
  • 雖然發生過一次的錯誤,但我甚至想知道哪些進程鎖定了「Temporary ASP.NET Files」文件夾中的dll,並且它與服務器上工作正常的鎖沒有任何區別。
  • 一次,直到一個IISRESET進行

任何有識之士任何人都可以提供將不勝感激錯誤啓動時,它錯誤每一次。讓我知道如果我錯過了什麼。

謝謝!

+0

我假設一旦遇到此問題,那麼對程序集的任何調用都會失敗並顯示上述錯誤消息(直到出現iisreset被執行)。 – 2010-06-30 19:00:42

+0

Tuzo - 你的假設是正確的。一旦問題開始,加載程序集的所有調用都會失敗(直到執行iisreset)。 – Daryl 2010-07-01 11:55:26

+0

我剛剛發現的一個有趣的事情是IIS目錄安全性,匿名訪問用戶不是IUSR_MachineName,而是IUSR_OldMachineName。我已經更新了管理員用戶和組下的用戶名,但我必須手動更新IIS匿名用戶帳戶。有誰知道這是否會影響它? – Daryl 2010-07-01 16:58:55

回答

3

看看Assembly Binding Log Viewer。它可能會讓你指向正確的方向。

我快速查看了其他SO答案,並且有人建議應用程序可能是針對已簽名的DLL版本開發的,但生產運行時只能訪問未簽名的版本。看起來您的產品正在加載未簽名的程序集(PublicKeyToken=null)。

+0

我打開了裝配綁定日誌查看器,但沒有出現。我將日誌的位置更新到自定義位置,以便它不會將其清除。我猜測它會給我提供與「===預綁定狀態信息===」之後的異常消息相同的信息。我想知道這個「不適用於此時參考的政策」是否與它有關? 生產和開發均使用未簽名。用戶描述的問題每次都在發生,而不是每週一次。 – Daryl 2010-06-30 15:21:20

0

安裝下面的NuGet包:

安裝,包裝log4net的-Version 2.0.0 安裝,包裝linqtoexcel

安裝,包裝System.Data.Sqlite.x86 -Version 1.0.88.0 Install- Package ServiceStack -Version 3.9.71 Install-Package ServiceStack.OrmLite.Sqlite32 -Version 3.9.71

相關問題