一 首先    程序集(dll) 安装到 GAC 中的方法

所谓的GAC,就是全局程序集缓存(Global Assembly Cache)。

针对一些类库项目或用户控件项目在程序开发完成后,有时需要将开发的程序集(dll文件)安装部署到GAC(全局程序集缓存)中,以便其他的程序也可以调用。被放入GAC的程序集,无论在何处被其他程序集引用,都可以保证自己能够被CLR找到并且加载。简单来说,GAC是一个有规范的目录结构。如果主机使用的是Windows操作系统,并且操作系统被安装在c:\windows下,那么GAC会被安装在c:\windows\assembly\下。

在一般情况下,GAC具有如下优点:
· 程序集被多处引用时,可有效减少内存成本。
· 通过发布者策略可以有效地发布程序集的最新版本。
· 同一程序集的多个版本可以共存,并且可以通过配置进行切换。
是否所有的程序集都可以被放入GAC中呢,答案是否定的。

开始安装

第一步: 给项目添加强名称:

  1. 在类库项目调试完成后,使用sn.exe工具生成一个密钥,此工具位于安装 .NET Framework 解决方案开发人员工具包 (SDK) 的 \bin 子目录中。SN 工具易于使用。

  命令行语句采用以下形式:

       sn -k "[DriveLetter]:\[DirectoryToPlaceKey]\[KeyName].snk"
        即: sn -k "生成的密钥的全路径"。 如在命令行输入: sn -k D:/myKey.snk

  2. 方法一:将密钥与项目的程序集进行关联: 项目属性-->签名-->为程序集签名-->选择强名称密钥文件。
      方法二   在项目的AssemblyInfo.cs文件中,修改"AssemblyKeyFile"的属性。 例如: [assembly:AssemblyKeyFile("D://myKey.snk")]

  3. 重新生成项目集。

第二步: 将dll添加到GAC中

一般来说,将程序集(dll)安装到GAC中有以下几种方法:

1.  管理工具->Microsoft.NET Framework 2.0 配置->管理->我的电脑->程序集缓存->选中右键"添加"->将程序集添加到程序集缓存。

2.  手动将要安装部署的dll文件拖至系统目录windows下的assembly文件夹下(一般为C:/windows/assembly),此种方法不便于在安装部署时使用。

3.   使用gacutil.exe工具安装:gacutil -i "要注册的dll文件全路径"。

"gacutil.exe”工具为.NET自带工具(C:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/Bin)

  在开始运行中输入"cmd”进入命令窗口,通过CD选择到"gacutil.exe”文件所在的目录,如在命令行输入: gacutil -i D:/Microsoft.SharePoint.dll

好了现在已经成功将DLL 安装到了GAC中但是这里有两点注意:

  1. 将程序集安装到GAC后,在VS的添加引用的对话框中并不会出现该程序集。 例如我将my.dll这个程序集使用Gacutil -i
    my.dll注册到GAC后,在添加引用的对话框中我们并不能找到它,这是因为添加引用对话框中的程序集都是位于"C:/Program
    Files/Reference Assemblies/" 或
    "C:/Windows/Microsoft.NET/Framework/版本号/"下,可以通过注册表增加类似的文件夹使得可以被添加引用对话框搜索到其下的程序集
    下面即将介绍到
  2. 需要大家明白一点,将程序集安装到GAC中主要是为了方便共享以及解决Dll hell的问题,并不适合在程序开发的过程中使用。那怎么样才能使用GAC中的程序集呢?这个不用你担心,Runtime会在GAC或指定目录中自动搜索所要引用的程序集。

二 程序集添加到 add refetence中的方法

在Visual Studio中,当为一个工程添加程序集引用时,弹出的“Add Reference”对话框会列出来一些程序集引用。那么如何把自己的程序集也添加到这里呢?

 
add reference是通过注册的路径进行扫描读取的。
因此通过修改注册表的方法可以做到这点。
对于32位的操作系统,添加如下注册表键的一个:
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\.NETFramework\VersionMinimum\AssemblyFoldersEx\MyAssemblies]@="AssemblyLocation"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\VersionMinimum\AssemblyFoldersEx\MyAssemblies]@="AssemblyLocation"
 
对于64位的操作系统,在32位注册表分支中添加如下注册表键的一个:
[HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\VersionMinimum\AssemblyFoldersEx\MyAssemblies]@="AssemblyLocation"
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\VersionMinimum\AssemblyFoldersEx\MyAssemblies]@="AssemblyLocation"
 
VersionMinimum表示应用的最低.NET Framework版本。如果VersionMinimum是v3.0,在AssemblyFoldersEx中指定的文件只适用于目标.NET Framework是3.0和更新的。
AssemblyLocation表示你想要在“Add Reference”对话框中显示的程序集所在位置。在HKEY_CURRENT_USER节点下创建只影响当前用户的设置。关闭并重启VS之后,在填加程序集时就能够看到新加的引用。
1.创建并build一个DLL名字为TestAddReference.dll,把它拷贝到c:\test目录下
 
2.创建注册表键和键值[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx\testDll]@="c:\test\"
 
3.重新打开VS,添加引用,在弹出的“Add Reference”对话框中,如果工程的目标.NET Framework是在v2.0.50727版本以上,你会看到TestAddReference
 

 

需要注意点:

1 32位机器与64位机器的注册表键值插入位于不同位置。

2 不同类型的程序注册表位置不同 silverlight 以及 windows phone 不再.netframework 里面而是在 Microsoft Sdks 里面

转自:https://www.cnblogs.com/boypig/archive/2011/10/26/2225355.html

dll安装到GAC以及引用的方法【转】的更多相关文章

  1. 未能添加对***.dll的引用 问题解决方法

    这个不是什么新问题了,这里说一下我遇到的这个操蛋事. 转载请注明出处 http://www.cnblogs.com/zaiyuzhong/p/6236263.html 我做的和往常一样,找到SDK开发 ...

  2. vmware tools安装程序无法继续,Microsoft Runtime DLL安装程序未能完成安装。的解决方法

    vmware tools安装程序无法继续,Microsoft Runtime DLL安装程序未能完成安装.的解决方法_华英雄_新浪博客 http://blog.sina.com.cn/s/blog_5 ...

  3. sharepoint 使用命令行注册dll文件到gac的方法

    使用命令行注册dll文件到gac的方法: gacutil.exe -i D:\SPFormLoginProject.dll 删除gac的dll方法: gacutil /u "SPFormLo ...

  4. 将WinForm程序(含多个非托管Dll)合并成一个exe的方法

    原文:将WinForm程序(含多个非托管Dll)合并成一个exe的方法 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. ILMerge能把托管dl ...

  5. WPF程序将DLL嵌入到EXE的两种方法

    WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...

  6. 将.NET dll注册到GAC(Global Assembly Cache)中

    当发现有多个解决方案引用一个dll时,为了不重复引用所以将.net的一个dll注册到GAC中去. gacutil.exe. 记得使用管理员权限打开 开始菜单-Microsoft Visual Stud ...

  7. wamp下安装php的xdebug调试的方法

    wamp下安装php的xdebug调试的方法 将下载好的php_xdebug-2.1.2-5.2-vc6.dll放在D:/wamp/php/ext/php_xdebug-2.1.2-5.2-vc6.d ...

  8. C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法

    使用反射(Reflect)获取dll文件中的类型并调用方法 需引用:System.Reflection; 1. 使用反射(Reflect)获取dll文件中的类型并调用方法(入门案例) static v ...

  9. 安装office2010提示要安装MSXML6.10.1129.0解决方法

    系统win7 32位 安装office2010出现了错误,提示要安装MSXML6.10.1129.0解决方法 1.下载MSXML6.10.1129.0进行安装 2.若本机已安装过不管用: a.在运行里 ...

随机推荐

  1. linux redis 设置密码:

    在服务器上,这里以linux服务器为例,为redis配置密码. 1.第一种方式 (当前这种linux配置redis密码的方法是一种临时的,如果redis重启之后密码就会失效,) (1)首先进入redi ...

  2. ubuntu 16.04 修改网卡显示名称

    ~# sudo nano /etc/default/grub找到:GRUB_CMDLINE_LINUX=""改为:GRUB_CMDLINE_LINUX="net.ifna ...

  3. fetch jsonp请求接口

    function loadTbbRec() { var fetchJsonp = require('fetch-jsonp'); fetchJsonp(ext.info.tbbRecUrl, { he ...

  4. 详解Nginx中HTTP的keepalive相关配置

    http keepalive在http早期 ,每个http请求都要求打开一个tpc socket连接,并且使用一次之后就断开这个tcp连接.使用keep-alive可以改善这种状态,即在一次TCP连接 ...

  5. 20190722java学习习惯小结

    1.周一——周六: 学习: 周日: 巩固练习测试. 2.java 大数据. python 人工智能 .. 3.写技术博客! 4.python应用: 人工智能.web开发.自动化运维.数据分析.爬虫.游 ...

  6. linux SSH 登录

    1:  远程连接linux server:       ssh -p22 root@192.168.XXX.XXX 然后输入密码. 2: 免密码的方式: A: sudo -i B: ssh-keyge ...

  7. Sping 补充完成修改功能

    1.视图层完整示例 <form action="#" th:action="@{/update/{id}(id=${user.id})}" th:obje ...

  8. Python中的并行编程速度

    这里主要想记录下今天碰到的一个小知识点:Python中的并行编程速率如何? 我想把AutoTool做一个并行化改造,主要目的当然是想提高多任务的执行速度.第一反应就是想到用多线程执行不同模块任务,但是 ...

  9. P4568 飞行路线【分层图最短路】

    题目链接:https://www.luogu.org/problem/P4568 题目大意:给定n个点,m条无向边,k次机会经过边时代价为 0 .给出起点和终点,求其最短路径. 解题思路: 两种方法, ...

  10. Yarn 资源调度器

    1. 概述 YARN 是一个资源调度平台,负责为运算程序提供服务器运算资源: YARN 由ResourceManager,NodeManager, ApplicationMaster 和 Contai ...