1. 程式人生 > >解決“未能載入檔案或程式集Microsoft.SqlServer.SqlEnum,”的思路及解決過程

解決“未能載入檔案或程式集Microsoft.SqlServer.SqlEnum,”的思路及解決過程

最近在做C#執行Sql指令碼的程式,環境VS2012+Sql Server 2008。本地執行沒有錯誤,但是釋出到伺服器上就報如下錯誤

“/”應用程式中的伺服器錯誤。



未能載入檔案或程式集“Microsoft.SqlServer.SqlEnum, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91”或它的某一個依賴項。系統找不到指定的檔案。


說明: 執行當前 Web 請求期間,出現未經處理的異常。請檢查堆疊跟蹤資訊,以瞭解有關該錯誤以及程式碼中導致錯誤的出處的詳細資訊。 


異常詳細資訊: System.IO.FileNotFoundException: 未能載入檔案或程式集“Microsoft.SqlServer.SqlEnum, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91”或它的某一個依賴項。系統找不到指定的檔案。


源錯誤: 


執行當前 Web 請求期間生成了未經處理的異常。可以使用下面的異常堆疊跟蹤資訊確定有關異常原因和發生位置的資訊。


程式集載入跟蹤: 下列資訊有助於確定程式集“Microsoft.SqlServer.SqlEnum, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91”未能載入的原因。




警告: 程式集繫結日誌記錄被關閉。
要啟用程式集繫結失敗日誌記錄,請將登錄檔值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)設定為 1。
注意: 會有一些與程式集繫結失敗日誌記錄關聯的效能損失。

要關閉此功能,請移除登錄檔值 [HKLM\Software\Microsoft\Fusion!EnableLog]。

看到以上報錯資訊頓時很慌張,首先我對系統檔案不熟悉,對錯誤資訊中提到的登錄檔也知之甚少,google搜尋解決方案又沒有類似的,專案驗收在即,頓時如熱鍋上的螞蟻。

但是不解決肯定是不行的,於是靜下心來,慢慢想解決方案,思路也就有了。

首先,本程式我引用了三個dll檔案,分別為:Microsoft.SqlServer.ConnectionInfo.dll    、Microsoft.SqlServer.Management.Sdk.Sfc.dll  、Microsoft.SqlServer.Smo.dll

這三個檔案均是安裝sql server時自帶的公用類庫,可以實現執行sql指令碼(如建立、刪除表及資料庫等),由於我對這三個類庫研究的不深,因此其他功能暫時不考慮。

言歸正傳,知道問題出現在哪幾個類庫上,我們再來看具體報錯資訊,“未能載入檔案或程式集“Microsoft.SqlServer.SqlEnum, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91”或它的某一個依賴項。系統找不到指定的檔案。”   我在釋出的伺服器上看到有以上三個庫檔案(C:\Windows\assembly下)但是版本為Version=10.0.0.0 而本地環境中引用的類庫版本為Version=11.0.0.0,導致伺服器上不認識類庫。把本地引用的類庫版本換成10,重新生成後釋出到伺服器上,一切正常,問題解決。

以上就是解決思路及方案,以後碰到類似的問題,小夥伴們再也不用發愁了。現在把解決方案歸納一下:

1查詢環境中是否有相應的類庫

2檢視版本是否正確(找到對應的類庫,右鍵----屬性-----詳細資訊---版權)