如何引用已经安装到GAC的程序集

本文介绍了如何引用已安装到GAC的程序集,强调Runtime自动搜索功能。通过创建项目、生成私钥、编译类库、运行示例,展示了即使删除程序集,只要在GAC中仍能正常运行。探讨了程序集的唯一标识和Runtime查找机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  最近一段时间在搜索延迟签名的一些问题时,看到网上很多的初学者对如何引用已经安装到GAC的程序集有很大的疑问,因此便有了这篇文章。

  首先,我假设看这篇文章的小C们已经明白如何对程序集进行强命名,以及如何将程序集安装到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或指定目录中自动搜索所要引用的程序集。看完下面的例子相信大家就会明白了。

  1)在VS中先创建一个ConsoleApplication项目ConsoleApplication1,再添加一个Class Library项目ClassLibrary1。

  2)在cmd中定位到sn工具所在目录,再使用 sn -k myKey.snk 生成私钥,并拷贝到ClassLibrary1项目中。

  3)复制以下代码到ClassLibrary1项目的class1.cs中,并build ClassLibrary1项目,得到ClassLibrary1.dll。

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Reflection;

[assembly: AssemblyKeyFileAttribute(
" myKey.snk " )]
namespace  ArmySone.Sample
{
    
public class People
    
{
        
public static void SayHello()
        
{
            Console.WriteLine(
"Hello!");
            Console.ReadKey();
        }

    }

}

  4)复制以下代码到ConsoleApplication1项目的Program.cs中,添加引用->浏览->找到ClassLibrary3.dll->点击“确定”按钮,这一步很重要一定是要添加已编译好的ClassLibrary3.dll程序集。此时,build ConsoleApplication1项目,在项目所在目录的bin/debug目录下可以找到ConsoleApplication1.exe,ClassLibrary3.dll,运行ConsoleApplication1.exe程序可以正常运行。

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  ArmySone.Sample;

namespace  ConsoleApplication1
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            People.SayHello();
        }

    }

}

  5)我们还是在第四步的目录中,将ClassLibrary3.dll删除,再运行ConsoleApplication1.exe会报错。原因大家都很清楚引用的程序集ClassLibrary3.dll已经不存在了。这时我们将ClassLibrary3.dll通过Gacutil -i ClassLibrary3.dll 将其安装到GAC中,再运行ConsoleApplication1.exe,这次程序正常运行。因为Runtime帮我们从GAC中找到了所要的程序集,但我们并没有给出任何的配置文件,Runtime是怎么找到它的呢?这点我也没有弄得很清楚,只知道程序集签名后会有一个唯一的名称来标识它,Runtime是根据这个标识来找到它的。有谁清楚的可以说说看。: )还有就是通过配置文件定制私有查找路径也可以让Runtime找到正确的程序集。这个东东大家网上搜搜吧。

  至此,文章结束。发现有什么问题,提出来。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值