Dot-Net

以程式方式將 .NET 程序集安裝到 GAC 中的方法

  • June 14, 2011

我需要創建一個小應用程序或腳本來將 .NET 程序集安裝到 GAC 中。我讀過有幾種方法可以做到這一點,包括:

  • 使用gacutil.exe
  • 執行以下程式碼行:

new System.EnterpriseServices.Internal.Publish().GACInstall("Foo.dll");

但是,如果我只是在機器上創建了適當的目錄並將程序集複製到該目錄中會發生什麼?GAC 目錄的結構如下: C:\Windows\assembly\GAC_MSIL\Foo\<version#>__<public token>\Foo.dll

除了創建文件夾結構並將程序集放入其中之外,上述兩種方法是否有什麼特別之處?

強烈建議使用現有方法(如您提到的方法),因為它們都由 Microsoft 支持和維護,並將繼續與未來的版本一起使用。

快速瀏覽一下Process Monitorgacutil.exe會發現它不僅僅是複製文件:

  • 並發問題(例如臨時文件、鎖定WINDOWS\assembly\GACLock.dat等)
  • 通知(例如HKLM\SOFTWARE\Microsoft\Fusion\GACChangeNotification\...
  • 索引(例如HKLM\SOFTWARE\Microsoft\Fusion\NativeImagesIndex...
  • 驗證(例如強名稱,…)

包裝器與這篇舊部落格文章System.EnterpriseServices非常相似,應該可以正常工作。

引用自:https://stackoverflow.com/questions/1460793