将程序集加入GAC,并让其能够在VS的添加引用的.NET选项卡中被引用

GAC是代码缓存,可以作为一个中央知识库放置程序集。

     将程序集放置到GAC中使得它们可被服务器上的多个应用程序引用。如果给予开发人员完全的版本控制,那么在其工作目录中管理每个应用程序的程序集将更简单。如果从GAC引用一个程序集,那么在该程序集更新时,引用它的每个应用程序都会受影响。乍一看,这是个不错的自动功能。不过,要记住,这意味着应用程序被更新了,而此更新没有经过测试来确保不会对应用程序造成损坏。

要将一个程序集添中到GAC中,必须给它一个强名(strong name)。如果一个程序集被签署为强名,就能确保该程序集是唯一的。其他人不可以创建同样的或更新的程序集。这保证了程序集来自于始创者(originator),没有被其他人修改。在强名化一个程序集时第一要做的事是创建一个将放置在文件中的密钥对。

 

创建密钥文件有两种方式:

  •  使用Visual Studio 2005项目中的属性设置
  •  手动使用.NET Framework中的SN实用程序

     可在C:\Program Files\Microsoft.NET\SDK\v2.0\Bin下找到SN实用程序。也可以选择Start|All Programs | Microsoft Visual Studio 2005 | Visual Studio Tools | Visual Studio 2005 | Command Prompt。在命令提示符中,输入sn -k "C:\MyKeyFile.snk"。这将在C:\根目录下构建强名密钥文件,如图2-6所示。

                      图2-6  在命令提示符下使用SN实用程序

在通过类库项目的属性用强名签署程序集时,必须指定强名文件。这可以通过从工具栏中选择Project | Properties命令完成。在出现属性窗口时,选择Signing选项卡,选中Sign the assembly复选框,如图2-7所示。使用下拉菜单,选择Browse找到已创建的密钥文件来创建一个强名密钥文件。如果还没有使用SN实用程序创建密钥文件,可以从下拉菜单中选择New(而非Browse)进行创建。


                                                                       图2-7  使用属性窗口中Signing选项卡

正如图2-8所示,Visual Studio 2005使得创建新密钥变得更容易,还提供了口令保护选项。

                                                     图2-8  使用Visual Studio 2005创建强名密钥

在属性窗口中,选择Compile选项卡,设置configuration为Active (Release)。这就删除了任何调试信息,为生产优化了程序集。没有设置为Release,就不能将代码送至生产,或是代码将运行得特别缓慢。现在可以从工具栏中选择Build | Build Solution来构建项目。注意要构建输出路径,因为在将程序集添加到GAC中时需要用到它。


 

将程序集添加到GAC

将程序集添加到GAC很简单,就是使用C:\Program Files\ Microsoft.NET\SDK\v2.0\Bin中的Global Assembly Cache Tool (Gacutil.exe)。也可以通过Start | All Programs | Microsoft Visual Studio 2005 | Visual Studio Tools | Visual Studio 2005 Command Prompt访问该工具的路径。记住,如果使用的.NET版本不同,路径会有所不同。在命令提示符中,输入gacutil.exe /i "<程序集路径>"来启动和使用该实用程序,如图2-9所示。

                                                                  图2-9  通过命令提示符启动gacutil.exe

至此我们就已经将程序集添加到GAC中了,现在你引用该程序集的时候,会发现引用后该程序集为全局程序集,编译时VS不会将其复制到项目本地目录中。

 

在VS的“添加引用”对话框中的.NET选项卡中显示GAC 程序集

.NET的GAC程序集默认是放在目录C:\WINDOWS\assembly\GAC_MSIL下的,但是你会发现就算将GAC程序集放在该目录下,在VS的添加引用的.NET选项卡列表里还是看不到该程序集

 

这里介绍两个方法来解决该问题

 

方案一:在“添加引用”对话框中显示程序集
即使已将程序集安装到全局程序集缓存 (GAC) 中,“添加引用”对话框也不会自动显示每个程序集。“添加引用”对话框基于路径并要求添加注册表项,该项指定要显示的程序集的位置。

在“添加引用”对话框中显示程序集
需要添加以下注册表项之一,其中 <AssemblyLocation> 是要在“添加引用”对话框中显示的程序集目录,例如 C:\\MyAssemblies。

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\.NETFramework\<version>\AssemblyFoldersEx\MyAssemblies]@="<AssemblyLocation>"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\<version>\AssemblyFoldersEx\MyAssemblies]@="<AssemblyLocation>"

注意
在 HKEY_LOCAL_MACHINE 配置单元下创建注册表项以后,所有用户都可以在“添加引用”对话框的指定位置看到程序集。在 HKEY_CURRENT_USER 配置单元下创建注册表项只会影响当前用户的设置。
 

重新启动 Visual Studio。
 

 

方案二:可以把你的DLL复制到.NET   Framework目录(%WINDIR%\Microsoft.NET\Framework\v2.x.yyyy)中,这样的话.可以达到你的目的.   但是,MS建议我们不应该将自己的assembly拷贝到Framework目录中。一个更好的方法就是把它们放在一个单独的目录中,然后给Windows   Registry添加一个key,告诉VS.NET在哪里可以找到这些assembly。除了核心的Framework   assembly外,VS.NET也可以显示在以下这些Registry   key中列出的目录中的任何assembly:HKEY_CURRENT_USER\Software\Microsoft\.NETFramework\AssemblyFolders   
HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\AssemblyFolders   
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\7.1\AssemblyFolders   
HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\7.1\AssemblyFolders  

 

PS:最后说明下,经实验发现:就算程序集不进行密钥签名和添加到GAC中,按照上面的方法将程序集所在目录的路径添加到注册表中,该程序集还是会出现在VS“添加引用”对话框中的.NET选项卡中,只不过此时在该选项卡中引用该程序集时,该程序集是作为私有程序集,编译时VS会将该程序集复制到项目本地目录中。

 

转载于:https://www.cnblogs.com/OpenCoder/archive/2010/10/29/1864739.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值