.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