.NET Framework 4.0中,如何把一個程式部署到全域應用緩衝(GAC)中發生了相當大的變化,VS2010 內建的 MSDN 都在一些地方描述是錯誤的。下面是我對如何部署 .NET Framework 4.0 GAC 整理的一些知識:
以前把一個程式部署到GAC,有下面四種方法,我們下面就以這四種方法為線索,說說 .NET Framework 4.0 中的問題。
使用Global Assembly Cache tool (Gacutil.exe)。
需要注意的是:這個工具在.NET Framework 運行時中並不包含。他是SDK的一部分。 在 .NET Framework 2.0 時,我們就要單獨下載 .NET Framework 2.0 SDK,或者裝了 Visual Studio 後才會具有這個工具;
以我的電腦為例,我裝的是win2008 R2, VS2010,我的這個工具預設就在
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\x64\gacutil.exe 目錄下。
這是安裝 VS2010 後給我內建的。
這個檔案不能 copy 到其他目錄下用, 我試過把 gacutil.exe , gacutil.exe.config copy 到其他目錄下,結果就不能用了。
而單獨的.NET Framework 4.0 SDK目前還沒有發布,我們在Windows SDK 的blog上可以看到,不久就會發布新版本。
所以,目前開發 .NET Framework 4.0 的程式, 如果你用到了 GAC, 這個GAC部署方法是停用,你不可再實際運營伺服器上部署 VS2010 吧。 我們只有等 .NET Framework 4.0 SDK 。
使用 Microsoft Windows Installer 。
也就是我們把整個部署需要的組件打包到安裝檔案,然後安裝即可。
如,VS2010 給我們提供了很多種常用的安裝程式製作方法,只要一步步的完成即可。
但是,如果你是做 WEB 開發的, 你會很頻繁的發布,每次發布,每次修改一個小bug,都要做一個安裝程式包? 這幾乎是一個非常愚蠢的做法。
使用 Assembly Cache Viewer (Shfusion.dll).
我們在安裝了 Windows Software Development Kit (SDK) 後(裝 Visual Studio 會自動給你裝 SDK),訪問 C:\Windows\assembly 目錄時,會自動使用Windows 的一個擴充 Assembly Cache Viewer (Shfusion.dll)。 這樣我們就可看到下面的圖,在這裡我們可以很方便的拖動一個組件進入GAC,也可以直接刪除一個組件:
但是,如果你仔細看的話,上面的GAC是沒有 .NET Framework 4.0 的。這是因為,從4.0 開始,GAC的實際目錄變成了: C:\WINDOWS\Microsoft.NET\assembly 目錄了,而不是 C:\Windows\assembly 。上面的方式自然也就沒法用了。
所以,目前開發 .NET Framework 4.0 的程式, 如果你用到了 GAC, 這個GAC部署方法是停用。
我所說的MSDN中錯誤的就是這裡,MSDN中說 .NET 4.0 仍然可以這麼用,其實是不可以的。
使用 Mscorcfg.msc (.NET Framework Configuration Tool)
這個工具,也就是我們之前常見的“Microsoft .NET Framework 2.0 Configuration”工具;如所示的:
但是需要注意的是:.NET Framework 4.0 以及之後的版本不再支援這種方式。我們只有在開發的之前版本的.NET程式,即 .NET 1.0,1.1, 2.0, 3.0, 3.5 的程式中才可以使用它。.NET 4開始不支援的原因參看這篇文章: Security Changes in the .NET Framework 4
當我們要在 .NET 2.0, 3.0, 3.5 的程式中使用時,我們應該使用:“Microsoft .NET Framework 2.0 Configuration”工具,這個工具仍然不再 .NET Framework 運行時中,而是在 .NET Framework 2.0 Software Development Kit (SDK) 中。
.NET 1.0, 1.1 , 對應版本的運行時仍然沒有這個工具,而是在 NET Framework redistributable package 中。
所以,同樣,目前開發 .NET Framework 4.0 的程式, 如果你用到了 GAC, 這個GAC部署方法是停用。
小結
目前開發 .NET Framework 4.0 的程式, 如果你用到了 GAC,你會很痛苦,你只能做安裝程式,這對頻繁更新的 WEB 程式來說,這是不可接受的。 我們只有等到對應的 SDK 發布後,才可以把用到GAC的程式升級成 .Net Framework 4.0
參考資料:
How to: Install an Assembly into the Global Assembly Cache.
http://msdn.microsoft.com/en-us/library/dkkx7f79.aspx
Demystifying the .NET Global Assembly Cache
http://www.codeproject.com/KB/dotnet/demystifygac.aspx
Global Assembly Cache in .NET 4.0
http://www.umbraworks.net/bl0g/rebuildall/2010/02/10/Global_Assembly_Cache_in_NET_4_0