7

我目前收到以下異常試圖使用企業庫驗證應用程序塊:「無法加載文件或程序集Microsoft.Practices.EnterpriseLibrary.Validation」異常

時出錯創建配置節用於驗證的處理程序:無法加載文件或程序集「Microsoft.Practices.EnterpriseLibrary.Validation,Version = 4.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35」或其某個依賴項。定位的程序集清單定義與程序集引用不匹配。 (例外從HRESULT:0x80131040)(C:\ Documents and Settings \ My Documents \ Visual Studio 2008 \ Projects \ Testers \ TestProject \ web.config line 12)

我知道什麼例外試圖告訴我,但我無法弄清楚如何解決它。我只安裝過一個版本的企業庫,這就是它(4.1.0.0),所以我不明白它是如何找到錯誤版本的,所以我想它是一個依賴性問題。我在項目中引入了企業庫4.1中的「Common」,「Validation」和「ObjectBuilder2」DLL作爲參考,所以我不確定我錯過了什麼。文件當然似乎表明這是我需要的。

有沒有什麼方法可以找出依賴性問題?

如果有幫助,我試圖使用企業庫配置工具來創建一個驗證應用程序塊規則集來驗證實體框架實體中的數據。我使用ASP.NET MVC在Visual Studio 2008中

感謝任何幫助/方向,你可以提供,在融合日誌

克里斯

回答

5

打開,看看在運行時被綁定什麼是彙編。

Hanselman最近有一個帖子應該對記錄和檢查輸出有幫助。

http://www.hanselman.com/blog/CommentView.aspx?guid=3654c8f3-c5c3-4dee-a01f-c9a8da3ef2fa

另一個重要的區別,使的是,被添加到項目中引用編譯時引用,並不會影響該代碼在其他運行時綁定的方式,如果比指定一個強名稱使用強烈命名的程序集。爲了找出運行時發生了什麼,你需要看看綁定日誌。日誌應該顯示運行時在定位程序集時所做的所有嘗試。如果程序集不在bin目錄以及可執行程序中,它很可能會在GAC中查找並找到它不期望的版本。

請注意,編譯器在引用程序集時不會使用GAC。所以很可能您在項目中使用的版本不同於您在GAC中安裝的版本。

此外,通過使用Windows資源管理器查看C:\ Windows \ assembly,可以非常容易地找到您安裝在GAC中的版本。錯誤消息中指定的版本將是編譯期間引用的版本。如果這些版本不匹配,這可能是你的問題,假設Fusion確實在GAC中尋找(通過查看Fusion日誌,這將顯而易見)。

+0

感謝您的指點。我最終意識到,由於我在做引用的方式,它只是在默認版本的DLL中,而不是新版本。我愚蠢地認爲我不得不自己構建DLL,而不是在包中使用預構建的二進制文件,所以顯然這個記號與我所設置的不一致。我使用Enterprise Library對安裝進行了整理,因此它使用的是由Microsoft構建的DLL,並且一切都很開心。我會考慮使用融合,但它聽起來像會幫助我更快地跟蹤這個問題。謝謝! – Chris 2010-01-05 16:52:03

相關問題