全局程序集缓存
.NET Framework (current version) 其他版本 
 
安装有公共语言运行时的每台计算机都具有称为全局程序集缓存的计算机范围内的代码缓存。全局程序集缓存中存储了专门指定给由计算机中若干应用程序共享的程序集。
应当仅在需要时才将程序集安装到全局程序集缓存中以进行共享。一般原则是:程序集依赖项保持专用,并在应用程序目录中定位程序集,除非明确要求共享程序集。另外,不必为了使 COM 互操作或非托管代码可以访问程序集而将程序集安装到全局程序集缓存。
注意
在有些情况下,您显然不希望将程序集安装到全局程序集缓存中。如果您将组成应用程序的某个程序集置于全局程序集缓存中,则将不再能够通过使用 xcopy 命令复制应用程序目录来复制或安装该应用程序。您还必须在全局程序集缓存中移动该程序集。
有两种方法可以将程序集部署到全局程序集缓存中:
使用专用于全局程序集缓存的安装程序。该方法是将程序集安装到全局程序集缓存的首选方法。
使用 Windows 软件开发包 (SDK) 提供的名为全局程序集缓存工具 (Gacutil.exe) 的开发工具。
注意
在部署方案中,应该使用 Windows Installer 将程序集安装到全局程序集缓存中。我们一般只在开发方案中使用全局程序集缓存工具,这是因为它不提供使用 Windows Installer 时可以提供的程序集引用计数功能和其他功能。
从 .NET Framework 4 开始,全局程序集缓存的默认位置为 %windir%\Microsoft.NET\assembly。在 .NET Framework 的早期版本中,默认位置为 %windir%\assembly。
管理员通常使用访问控制列表 (ACL) 来保护 systemroot 目录,以控制写入和执行访问。因为全局程序集缓存安装在 systemroot 目录的子目录中,它继承了该目录的 ACL。建议只允许具有“管理员”权限的用户从全局程序集缓存中删除文件。
在全局程序集缓存中部署的程序集必须具有强名称。将一个程序集添加到全局程序集缓存时,必须对构成该程序集的所有文件执行完整性检查。缓存执行这些完整性检查以确保程序集未被篡改(例如,当文件已更改但清单未反映此更改时)。
C:\Windows\Microsoft.NET\assembly
%windir%\Microsoft.NET\assembly

 

 
 

全局程序集缓存工具使你可以查看和操作全局程序集缓存和下载缓存的内容。

Visual Studio 命令提示。

在命令提示符处,键入以下内容:

gacutil [options] [assemblyName | assemblyPath | assemblyListFile]
参数
 

参数

说明

assemblyName

myAssembly, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0038abc9deabfle5)。

assemblyPath

包含程序集清单的文件的名称。

assemblyListFile

请参见本主题后面的 assemblyListFile 内容示例。

选项

说明

/cdl

删除下载缓存的内容。

/f

如果全局程序集缓存中已经存在同名的程序集,全局程序集缓存工具将覆盖它。

/h[elp]

显示该工具的命令语法和选项。

/i assemblyPath

将程序集安装到全局程序集缓存中。

/ifassemblyPath

如果全局程序集缓存中已经存在同名的程序集,全局程序集缓存工具将覆盖它。

指定此选项相当于同时指定 /i 和 /f 选项。

/il assemblyListFile

将 assemblyListFile 中指定的一个或多个程序集安装到全局程序集缓存中。

/irassemblyPath

scheme

id

description

有关可为这些参数指定的有效值的说明,请参见 /r 选项。

指定此选项相当于同时指定 /i 和 /r 选项。

/l[assemblyName]

如果指定 assemblyName 参数,则全局程序集缓存工具只列出与该名称匹配的程序集。

/ldl

列出下载的文件缓存的内容。

/lr[assemblyName]

如果指定 assemblyName 参数,则全局程序集缓存工具只列出与该名称匹配的程序集及其对应的引用计数。

/nologo

取消显示 Microsoft 启动版权标志。

/r[assemblyName | assemblyPath]

scheme

id

description

与 /i/il/u 或 /ul 选项一起指定此选项。

若要卸载程序集,请指定assemblyNameschemeid 和 description 参数。

如果卸载某个程序集,则在下列情况下,全局程序集缓存工具还会从全局程序集缓存中移除该程序集:该程序集是最后一个要移除的引用,并且 Windows Installer 没有对该程序集的未处理引用。

可以指定以下值之一:

  • 应用程序通过将注册表项添加到 HKLM\Software\Microsoft\Windows\CurrentVersion 来将自己添加到“添加/删除程序”。

  • FILEPATH:如果安装程序没有将应用程序添加到“添加/删除程序”中,则指定此值。

  • 此值允许你为 id 参数指定自定义信息。

为 id 参数指定的值取决于为 scheme 参数指定的值:

  • 例如,如果注册表项是 HKLM\Software\Microsoft\Windows\CurrentVersion\MyApp,请为 id 参数指定 MyApp。

  • 如果为 scheme 参数指定 FILEPATH,请指定安装程序集的可执行文件的完整路径作为 id 参数。

此信息在枚举引用时显示。

/silent

取消所有输出的显示。

/uassemblyName

将某个程序集从全局程序集缓存卸载。

/ufassemblyName

通过移除对程序集的所有引用来强制卸载指定的程序集。

指定此选项相当于同时指定 /u 和 /f 选项。

注意

如果尝试此操作,则全局程序集缓存工具会显示错误消息。

/ul assemblyListFile

从全局程序集缓存中卸载 assemblyListFile 中指定的一个或多个程序集。

/u[ngen]assemblyName

如果指定的程序集具有现有引用计数,则全局程序集缓存工具会显示引用计数,而且不会从全局程序集缓存中移除该程序集。

注意

Ngen.exe(本机映像生成器) 的 uninstall 命令。

Ngen.exe(本机映像生成器) 创建的程序集的本机映像。

/urassemblyName

scheme

id

description

有关可为这些参数指定的有效值的说明,请参见 /r 选项。

指定此选项相当于同时指定 /u 和 /r 选项。

/?

显示该工具的命令语法和选项。

备注
 
注意

必须具有管理员特权才能使用 Gacutil.exe。

具体说来,Gacutil.exe 使你可以将程序集安装到缓存中、从缓存中移除程序集以及列出缓存的内容。

这些选项在产品开发期间适用,但不适用于实际的产品安装。

下面的示例说明了包含要安装的程序集的文件的内容。

 
 
myAssembly1.dll
myAssembly2.dll
myAssembly3.dll

下面的示例说明了包含要卸载的程序集的文件的内容。

 
 
myAssembly1,Version=1.1.0.0,Culture=en,PublicKeyToken=874e23ab874e23ab
myAssembly2,Version=1.1.0.0,Culture=en,PublicKeyToken=874e23ab874e23ab
myAssembly3,Version=1.1.0.0,Culture=en,PublicKeyToken=874e23ab874e23ab
示例
 

mydll.dll 安装到全局程序集缓存中。

 
 
gacutil /i mydll.dll

hello(只要不存在对该程序集的引用计数)。

 
 
gacutil /u hello

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

My Application Description。

 
 
gacutil /i /r myDll.dll UNINSTALL_KEY MyApp "My Application Description"

MyApp。

gacutil /i /r myDll.dll FILEPATH c:\applications\myApp\myApp.exe MyApp

OPAQUE 允许你自定义 id 和 description 参数。

  
gacutil /i /r mydll.dll OPAQUE "Insert custom application details here" "Insert Custom description information here"

 

如果这是对该程序集的最后一个引用,则将同时从全局程序集缓存中移除该程序集。

gacutil /u /r myDll.dll FILEPATH c:\applications\myApp\myApp.exe MyApp

 

下面的命令列出全局程序集缓存的内容。 

gacutil /l

 

相关文章:

  • 2022-12-23
  • 2021-05-30
  • 2022-12-23
  • 2022-01-23
  • 2021-08-03
  • 2021-08-07
  • 2022-01-18
  • 2022-02-05
猜你喜欢
  • 2022-12-23
  • 2022-01-15
  • 2021-09-18
  • 2022-12-23
  • 2022-12-23
  • 2021-09-02
相关资源
相似解决方案