Fork me on GitHub

将dll添加到GAC(Global Assembly Cache)中

转载: http://www.cnblogs.com/bluesky4485/archive/2010/03/31/1701744.html

由于公司开发工具版本不统一,有使用VS2005的,有 VS2008的,有VS2010的,这样代码共享的时候就会存在问题。不可能把所有的版本的工具都安装上。所以最后的方式就是在代码中把其他几种的解决方 案和工程文件都放一个,这样人家就可以选择相应的版本去打开工程。这种直接改的方式前提条件是程序都是编译成2.0版本的,且没有使用高版本的语言特性, 否则用低版本打开的时候可能编译不过。

  解决方案Sln文件 工程文件csproj文件
VS2005

Microsoft Visual Studio Solution File, Format Version 9.00

# Visual Studio 2005

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
VS2008

Microsoft Visual Studio Solution File, Format Version 10.00

# Visual Studio 2008

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
VS2010

Microsoft Visual Studio Solution File, Format Version 11.00

# Visual Studio 2010

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">

简单的这么修改一下应该就可以打开相应的解决方案的。

怎么样将一个dll加载到GAC中去咧?之前遇到过一个问题就是Oracle.DataAccess.dll的问题,本身机子上面安装了10G,但是后来 知道11G中提供的Oracle.DataAccess.dll中包含一个新方法OracleBulkCopy,类似.net中专门用于Sql Server的SqlBulkCopy。那个时候是想直接拿那个dll拿来直接用的,可写了一个示例程序运行的时候却出现错误, 就是说dll要注册到GAC中去才行。那个郁闷啊,恨的心痒痒的。可能是我比较迟钝吧,后来才想到一个可能就是GAC里面的那个 Oracle.DataAccess.dll版本和程序中引用的不一致导致的错误。

其实.net自带的就有一个工具可以将dll注册到 GAC中去的,以前一直没关注过。gacutil.exe。开始菜单-Microsoft Visual Studio -Visual Studio Tools-Visual Studio 2008 命令提示,在控制台中输入 gacutil.exe 回车,既可以看到一些参数。

image

一般要安装dll到GAC中的话选择-i参数即可,后面跟上dll文件的完整路径。

例如:

gacutil.exe -i E:\ODP.NET\bin\2.x\Oracle.DataAccess.dll

这样的话这个dll就被注册到GAC里面去了,有一个不好的就是这个路径不能再改变了,比较好的一个替代方法就是将dll直接copy到C:\WINDOWS\assembly这个目录下,再去注册。

如果你想要知道一个注册到GAC的dll的一些信息的话,比如Version, Culture, PublicKeyToken等也可以使用gacutil.exe -l去查看。具体的一些其他使用看上面的图就知道了。

嘿嘿,以后可以随便网GAC里面注册dll了咧。省去不少麻烦啊。

希望对各位有用,没用也就当自己做过备忘吧,

posted @ 2012-12-21 15:05  花儿笑弯了腰  阅读(1490)  评论(0编辑  收藏  举报