导航

.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 给我们提供了很多种常用的安装程序制作方法,只要一步步的完成即可。

image

但是,如果你是做 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,也可以直接删除一个组件:

image

但是,如果你仔细看的话,上面的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”工具;如下图所示的:

image

但是需要注意的是:.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