2009-06-01 209 views
10

我正在使用NHibernate的SqlServerCe系統。從我的驅動程序中,如果我添加System.Data.SqlServerCe程序集作爲參考,我可以很好地創建和運行對數據庫的查詢。當試圖使用NHibernate的,不過,我得到以下異常:無法加載文件或程序集

類型「System.IO.FileNotFoundException」的第一次機會異常出現在mscorlib.dll 其他信息:無法加載文件或程序集「系統。 Data.SqlServerCe'或它的一個依賴關係。該系統找不到指定的文件。

我追查到一個對Assembly.Load(「System.Data.SqlServerCe」)的調用,這看起來應該工作的異常。 System.Data.SqlServerCe程序集在GAC中(我也嘗試將它作爲本地引用添加到CopyLocal = true中,無濟於事),並且我可以使用它的成員,所以爲什麼我不能顯式地加載它?當我在Reflector中打開程序集時,它在加載System.Transactions引用時遇到了問題(我也嘗試將它添加爲本地引用,但無濟於事),因此加載該程序集可能是問題,而不是系統。 Data.SqlServerCe程序集。

這是常見問題嗎?系統配置錯誤,也許?

+0

看起來你從來沒有聽說過融合:http://www.hanselman.com/blog/BackToBasicsUsingFusionLogViewerToDebugObscureLoaderErrors.aspx – zvolkov 2009-06-01 19:41:18

+0

哦,整潔的工具。它給我的反饋是: LOG:之前看到過相同的綁定,並且hr = 0x80070002失敗。 ERR:在預先下載檢查期間發生不可恢復的錯誤(hr = 0x80070002)。 這似乎沒有什麼用處 - 之前失敗了,所以讓我們再次失敗?我需要閱讀融合文檔,希望能夠更好地理解這一點。 但是我指出了我的問題的解決方案 - 下面的細節。 – Dathan 2009-06-01 22:39:51

回答

8

顯然這可以通過在app.config文件中添加一個<qualifyAssembly>元素來解決。添加以下內容讓我的應用順利運行:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <qualifyAssembly partialName="System.Data.SqlServerCe" fullName="System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /> 
    </assemblyBinding> 
</runtime> 

謝謝!

+0

是的上面提到的fullName的確是程序集的全名。它爲CLR提供了查找和加載特定程序集所需的信息。您也可以在.config文件中的連接字符串中替換該fullName(代替partialName) – nocache 2009-06-03 03:00:05

1

我有類似的問題。我所做的錯誤是我試圖執行../obj/x86/Release中存在的.exe,而我應該執行../bin/Release中的.exe。 (我是C#的絕對新手)。

(我也注意到,這../bin/Release目錄中,引用的.dll文件複製到本地。)

2

這是最有可能連接到某些系統(MIS)的配置。

但是,通過設計SQL Server CE只是一個DLL,它可能與您的產品一起發貨。
這意味着您可以在System.Data.SqlServerCe的參考屬性中將Copy local設置爲True,即可完成。

相關問題