最近在做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查看版本是否正確(找到對應的類庫,右鍵----屬性-----詳細信息---版權)