`
bzu334fc
  • 浏览: 15225 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

公共语言运行库中的程序集-03全局程序集缓存

 
阅读更多

公共语言运行库中的程序集-03全局程序集缓存
2011年06月08日
  安装有公共语言运行库的每台计算机都具有称为全局程序集缓存的代码缓存(计算机范围内的)。全局程序集缓存中存储了指定给计算机中若干应用程序共享的程序集。
  仅在需要时将程序集安装到全局程序集缓存中共享。一般地,除非明确要求共享程序集,程序集依赖项保持专用,并在应用程序目录中定位程序集。
  另外,不必为了使 COM 互操作或非托管代码能访问程序集,而将程序集安装到全局程序集缓存。
  说明:在有些情况下,您显然不希望将程序集安装到全局程序集缓存中。如果您将应用程序的某个程序集置于全局程序集缓存中,则将不再能使用 xcopy 命令复制应用程序目录来复制或安装该应用程序,必须在全局程序集缓存中移动该程序集。
  将程序集部署到全局程序集缓存中的方法如下: 1)         使用专门的全局程序集缓存安装程序。该方法是将程序集安装到全局程序集缓存的首选方法。
  2)         使用 Windows SDK 提供的全局程序集缓存工具 (Gacutil.exe) 。
  3)         使用 Windows 资源管理器将程序集拖到缓存中。 说明:在部署中,应该使用 Windows Installer 2.0 将程序集安装到全局程序集缓存中。一般地,只在开发中使用 Windows 资源管理器或全局程序集缓存工具,因为它们不提供 Windows Installer 程序集引用计数功能等。
  管理员通常使用访问控制列表 (ACL) 来保护 systemroot 目录,以控制写入和执行访问。因为全局程序集缓存安装在 systemroot 目录的子目录中,它继承了该目录的 ACL。建议只允许具有"管理员"权限的用户从全局程序集缓存中删除文件。
  在全局程序集缓存中部署的程序集必须具有强名称。将一个程序集添加到全局程序集缓存时,必须对构成该程序集的所有文件执行完整性检查。缓存执行这些完整性检查以确保程序集未被篡改(例如,文件已更改,但清单未反映此更改时)。 全局程序集缓存工具可以查看和操作全局程序集缓存和下载缓存的内容。 
  gacutil [options] [assemblyName | assemblyPath | assemblyListFile] 使用"/?"或"/h",显示该工具的命令语法和选项。即:
  Gacutil /?
  或
  Gacutil /h 全局程序集缓存工具提供与 Windows 外壳程序扩展 (Shfusion.dll) 大致相同的缓存查看功能,但它更适于生成脚本、生成文件和批处理文件。
  说明:必须具有管理员特权才能使用 Gacutil.exe。
  具体说来,Gacutil.exe 可以将程序集安装到缓存中、从缓存中移除程序集以及列出缓存的内容。
  Gacutil.exe 提供支持引用计数的选项,类似于 Windows Installer 所支持的引用计数方案。您可以使用 Gacutil.exe 安装两个使用同一程序集的应用程序;全局程序集缓存工具跟踪对该程序集的引用数。结果是,该程序集将一直保留在计算机上,直到卸载这两个应用程序为止。如果将 Gacutil.exe 用于实际产品安装,请使用支持引用计数的选项。同时使用 /i 和 /r 选项可以安装程序集并添加引用对其进行计数。同时使用 /u 和 /r 选项可以移除对程序集的引用计数。注意,单独使用 /i 和 /u 选项不支持引用计数。这些选项在开发期间适用,但不适用于实际的产品安装。
  使用 /il 或 /ul 选项可以安装或卸载存储在 ANSI 文本文件中的程序集。该文本文件中的内容必须具有正确的格式。若要使用文本文件安装程序集,请在文件中的单独一行上分别指定每个程序集的路径。下面的示例说明了包含要安装的程序集的文件的内容。
  myAssembly1.dll
  myAssembly2.dll
  myAssembly3.dll
  若要使用文本文件卸载程序集,请在文件中的单独一行上分别为每个程序集指定完全限定的程序集名称。下面的示例说明了包含要卸载的程序集的文件的内容。
  myAssembly1,Version=1.1.0.0,Culture=en,PublicKeyTo ken=874e23ab874e23ab
  myAssembly2,Version=1.1.0.0,Culture=en,PublicKeyTo ken=874e23ab874e23ab
  myAssembly3,Version=1.1.0.0,Culture=en,PublicKeyTo ken=874e23ab874e23ab 下面命令将程序集 mydll.dll 安装到全局程序集缓存中:
  gacutil /i mydll.dll
  下面命令从全局程序集缓存中移除程序集 hello(只要不存在对该程序集的引用计数):
  gacutil /u hello
  请注意,上面的命令可能会从程序集缓存中移除多个程序集,原因是程序集名称不是完全指定的。例如,如果在该缓存中安装有 hello 的 1.0.0.0 和 3.2.2.1 两个版本,则 gacutil /u hello 命令会将这两个程序集都移除。
  使用下面的示例以避免删除多个程序集。该命令只删除与完全指定的版本号、区域性和公钥匹配的 hello 程序集:
  gacutil /u hello, Version=1.0.0.1, Culture="de",PublicKeyToken=45e343aae32233ca
  下面命令将 assemblyList.txt 文件中指定的程序集安装到全局程序集缓存中:
  gacutil /il assemblyList.txt
  下面命令从全局程序集缓存中移除 assemblyList.txt 文件中指定的程序集:
  gacutil /ul assemblyList.txt
  下面命令将 myDll.dll 安装到全局程序集缓存中,并添加引用对其进行计数,跟踪引用。程序集 myDll.dll 由应用程序 MyApp 使用。UNINSTALL_KEY MyApp 参数指定将 MyApp 添加 Windows"添加/删除程序"中的注册表项。description 参数被指定为 My Application Description:
  gacutil /i /r myDll.dll UNINSTALL_KEY MyApp "My Application Description"
  下面命令将 myDll.dll 安装到全局程序集缓存中,并添加引用对其进行计数,跟踪引用。scheme 参数 FILEPATH 和 id 参数 c:\applications\myApp\myApp.exe 指定要安装 myDll.dll 应用程序的路径。description 参数被指定为 MyApp:
  gacutil /i /r myDll.dll FILEPATH c:\applications\myApp\myApp.exe MyApp
  下面命令将 myDll.dll 安装到全局程序集缓存中,并添加引用对其进行计数,跟踪引用。scheme 参数 OPAQUE 允许您自定义 id 和 description 参数:
  gacutil /i /r mydll.dll OPAQUE "Insert custom application details here" "Insert Custom description information here"
  下面命令移除应用程序 myApp 对 myDll.dll 的引用。如果这是对该程序集的最后一个引用,则将同时从全局程序集缓存中移除该程序集:
  gacutil /u /r myDll.dll FILEPATH c:\applications\myApp\myApp.exe MyApp
  下面的命令列出全局程序集缓存的内容:
  gacutil /l
  原文地址:
分享到:
评论

相关推荐

    程序集和全局程序集缓存.doc

    程序集是任何 .NET Framework 应用程序的基本构造块。例如,在生成简单的 C# 应用程序时,Visual Studio 创建一个单个可移植可执行 (PE) 文件形式的程序集,明确地说就是一个 EXE 或 DLL。

    操作全局程序集缓存(GAC)的.NET应用程序

    对全局程序集缓存(Global Assembly Cache简称:GAC)的操作所用EXE及生产密钥的EXE程序,压缩包中的程序类型为.NET。 sn.exe;gacutil.exe;GacKey.snk(实例)

    把程序集安装到全局程序集缓存中的步骤

    这有助于防止具有相同名称的组件相互冲突或被消耗应用程序误用) 使用.net Framework 开发包中bin目录下的SN工具生成加密密钥对,例如:在D盘建立文件夹:GACkey,然后在命令行中执行:sn -k “D:\GACkey\GACkey.snk...

    PowerShell中使用.NET将程序集加入全局程序集缓存

    主要介绍了PowerShell中使用.NET将程序集加入全局程序集缓存,本文介绍了两种方法实现把程序集加入全局程序集缓存,着重讲解了使用.Net的类库解决这个需求,需要的朋友可以参考下

    powershell-gac:用于查看和修改全局程序集缓存(GAC)的PowerShell模块

    全局程序集缓存(GAC)是.Net程序集的机器范围存储库。 PowerShell GAC提供了几个PowerShell命令来查看和修改GAC。 PowerShell GAC独立运行,不依赖于诸如gacutils.exe之类的工具。 PowerShell GAC使用已记录的本...

    引用全局程序集缓存内的程序集的方法

    把程序集安装到GAC,但开发时VS并不会加载GAC,所以你没有办法去添加引用。

    详解.NET程序集的加载规则

    程序集的加载涉及到很多方面的知识,包括配置文件、全局缓存装配、私有目录等的查找。用LoadAWithPartialName方法加载程序集,必须提供程序集的文本名称,还可以包公钥标记、版本或区域性等,但不必包含完全引用信息...

    DevExpress & XAF 10.1.4重编编译 - Part 2

    DevExpress & XAF 10.1.4重编编译 - Part 2

    强名称如何引用非强名称

    服务器控件编程中,要把控件添加到VS的全局程序集缓存中,那么这个控件必须具有强名称。强名称程序集只能引用强名称的程序集。如果要生成某个强名称的程序集,而这个程序集要引用另外一个非强名称的程序集,则可以用...

    gacutil.exe

    Gacutil.exe(全局程序集缓存工具)gacutil.exe 可单独运行 .net 3.5 gacutil.exe 可单独运行 .net 3.5gacutil.exe 可单独运行 .net 3.5gacutil.exe 可单独运行 .net 3.5gacutil.exe 可单独运行 .net 3.5gacutil.exe...

    RefExplorer:显示 .NET 程序集之间依赖关系的工具

    您甚至可以从全局程序集缓存 (GAC) 添加一个完整的文件夹或程序集。 如果任何引用损坏,则会显示详细的错误消息,并在图表中相应地标记位置。 开发环境 该解决方案可以使用 Visual Studio 2013 构建。必要的依赖项...

    .NET之美:.NET关键技术深入分析

    7.2.5全局程序集缓存 7.2.6延迟签名 7.3本章小结 第8章流和序列化 8.1文件 8.1.1 不同视角下的文件 8.1.2位、字节和字节数组 8.2流 8.2.1 关于流的类比 8.2.2使用流进行文件复制 8.2.3 流的类型体系 8.3...

    C# 编程指南 C# 随身参考 Wego开发组专用

    程序集和全局程序集缓存(C# 编程指南) 属性(C# 编程指南) 集合类(C# 编程指南) 异常和异常处理(C# 编程指南) 互操作性(C# 编程指南) 线程处理(C# 编程指南) 性能(C# 编程指南) 反射(C#...

    8086/8088汇编语言程序设计教程

    第一部分是基础部分,以8086/8088为背景,以DOS和PC兼容机为软硬件平台,以MASM和TASM为汇编器,介绍汇编语言的有关概念,讲解汇编语言程序设计技术。第二部分是提高部分,以80386为背景,以新一代微处理器Pentium为...

    .Net平台代反编译及代码分析工具,超好用

    您可以通过从计算机指定适当的文件或使用“从GAC打开”选项打开程序集,该选项为您提供全局程序集缓存中可用的条目列表。 4、.NET程序集的可靠反向工程工具 所有考虑的事情,dnSpy是一个方便的应用程序,使您能够以...

    dnSpy中文破解版反编译工具

    您可以通过从计算机指定适当的文件或使用“从GAC打开”选项打开程序集,该选项为您提供全局程序集缓存中可用的条目列表。 4、.NET程序集的可靠反向工程工具 所有考虑的事情,dnSpy是一个方便的应用程序,使您能够以...

    dnSpy反编译工具v3.0.2中文版(支持在线编辑NET代码,直接保存exe)

    您可以通过从计算机指定适当的文件或使用“从GAC打开”选项打开程序集,该选项为您提供全局程序集缓存中可用的条目列表。 4、.NET程序集的可靠反向工程工具 所有考虑的事情,dnSpy是一个方便的应用程序,使您能够以...

Global site tag (gtag.js) - Google Analytics