瞭解GAC:從“找不到Microsoft.SqlServer.SqlClrProvider.dll”的問題開始

瞭解GAC:從“找不到Microsoft.SqlServer.SqlClrProvider.dll”的問題開始
                            老帥
   先上圖,看真相,如下:


一、問題描述
   我使用Microsoft.SqlServer.Smo開發了一個數據庫管理工具,根據定製的需求,完成對SQLServer的管理。部署到客戶機以後,就提示上述錯誤。而這個文件在我本機上使用全盤搜索,無論如何也搜索不到。

二、追根溯源
   經過研究,發現這個文件是SQLServer2012的一個運行時支持庫,存在於SQLSysClrType.msi中,下載地址如下:
   http://www.microsoft.com/zh-cn/download/details.aspx?id=43339
  
   包含x86和x64兩個版本,請根據自己的需要使用。


三、使用方法

   當然,我們可以把SQLSysClrType.msi安裝到客戶機中使用,其實我們只需要這個動態庫文件而已:

   Microsoft.SqlServer.SqlClrProvider.dll
   事實上只需要把這個文件和我們的exe一起部署到客戶機即可,但是安裝完SQLSysClrType.msi之後,我們在本機上仍然搜索不到這個動態庫。
   原來這個文件安裝在系統的GAC中!!!

   什麼是GAC?
   微軟爲提高系統安全,自Vista推出後,在Windows系統中加入了一個新的東東——UAC(User Account Control),這樣一個新的技術使得許多操作都受到了約束,尤其是對系統設置、文件的修改,Win7作爲一個衍生品,也受到了UAC的保護。
   在.NET項目開發中,針對一些類庫項目或用戶控件項目,當程序開發完成後,有時需要將開發的程序集,安裝部署到GAC(Global Assembly Cache)中,以便其他的程序也可以調用。
   通常,將程序集安裝到GAC有兩種方法:
   1、將程序集(dll文件)手動拖至 C:/Windows/assembly 文件夾中。
   2、利用命令行或者全局程序集緩存工具Gacutil進行安裝。

   原來如此!
   GAC的目錄在c:\windows\assembly, 而這個目錄是不允許你直接複製粘貼的,只能使用命令行,你會發現GAC的目錄結構與Windows Explorer展示給你的看的目錄不同:


   爲了把文件拿出來, 你需要使用命令行:
     
   這樣就可以拿到你需要的動態庫了!!!
 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章