2013-03-11 64 views
1

我有一個最近修改過的項目。該項目使用.NET編寫,並針對x64機器進行編譯。我有一個DataEntities模型,我們已經建立了與我們的數據庫進行交互的模型。但是,當我們嘗試連接到實體框架模型時,會出現錯誤。實體框架與Interop.SHDocVw有什麼關係?

實體框架EDMX文件名爲DataCentral.edmx。使用這個文件,我們試圖運行的代碼連接到我們的實例是非常簡單的。

 string cs = CSManager.GetConnectionString(); 
     DataCentralEntities ctx = new DataCentralEntities(cs); 

當我們運行這兩條線,它崩潰在與的內-內部異常的第二行:

Could not load file or assembly 'Interop.SHDocVw, Version=1.1.0.0, 
Culture=neutral, PublicKeyToken=null' or one of its dependencies. 
An attempt was made to load a program with an incorrect format. 

當我們運行它作爲86(這是不可能的,從長遠 - 其他原因),它運行得很好。我沒有檢查連接字符串,並且格式正確。

我的問題是:我不我的任何新的變化使用SHDOCVW。事實上,我直到遇到這個錯誤才聽說過它。這可能導致它在這裏嘔吐?我錯過了什麼?

UPDATE

我們發現,可能建於對周圍的.NET 2.0的時間的一種形式。 (甚至可能更早)。它通過ShDocVw庫創建了對Web瀏覽器控件(而不是官方WebBrowser控件)的引用。顯然,在官方控制出現之前,這是一種將Web瀏覽器嵌入到應用程序中的相當常見的方式。

我們升級這種形式使用官方WebBrowser控件,並在我們的項目中刪除的Shdocvw.dll所有引用,一切現在正在爲預期的,即使是在64位。

我仍然不明白的是爲什麼實體框架在該行崩潰時SHDOCVW.DLL一提的是在您的項目。那部分對我來說毫無意義。但是,我們現在回來了。

回答

2

在某些情況下的EntityFramework試圖加載由主程序集引用的程序(最值得注意的是它的時候EF尋找預編譯的看法發生)。在你的情況下,這會導致異常,這會導致將32位程序集加載到64位進程中。請注意,如果有其他事情嘗試加載此程序集,則會發生同樣的情況。您需要使用64位程序集或將您的項目構建爲32位。另一種選擇是使用Corflags將啓動程序集設置爲32位,這將導致在64位機器上創建32位進程,因此您將能夠加載之前導致問題的程序集。