`
pavel
  • 浏览: 928451 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

GAC( 全局程序集缓存)

阅读更多

计算机范围内的代码缓存,它存储专门安装的程序集,这些程序集由计算机上的许多应用程序共享。在全局程序集缓存中部署的应用程序必须具有强名称
  GAC全称是Global   Assembly   Cache,他的作用是可以存放一些有很多程序都要用到的公共Assembly,例如System.Data、System.Windows.Forms等等。这样,很多程序就可以从GAC里面取得Assembly,而不需要再把所有要用到的Assembly都拷贝到应用程序的执行目录下面。举例而言,如果没有GAC,那么势必每个WinForm程序的目录下就都要从C:WINDOWSMicrosoft.NETFrameworkv1.0.3705下面拷贝一份System.Windows.Forms.dll,这样显然不如都从GAC里面取用方便,也有利于Assembly的升级和版本控制。  
   
  除了系统默认放置在GAC中的Assembly如System.Windows.Forms以外,我们也可以添加自己的Assembly:  
  1)创建一个strong-name的Assembly,例如ToolbarComponent.dll  
  2)运行gacutil   -i   ToolbarComponent.dll,把这个Assembly添加到GAC  
  3)在程序中动态装载:  
  System.Reflection.Assembly   ass=Assembly.Load("ToolbarComponent,   Version=1.0.934.20434,   Culture=neutral,   PublicKeyToken=65f45658c8d4927f");  
  MessageBox.Show("Is   the   assembly   loaded   from   GAC    "+ass.GlobalAssemblyCache);  
  在上面的程序中,ToolbarComponent就是从GAC装载而不是从程序的运行目录下的dll文件中装载,程序目录下不需要放置ToolbarComponent.dll程序也能正常运行。另外,Assembly.Load()中的参数可以通过"gacutil   -l"查到。  
   
  另外,上面提到了GAC中的Assembly必须是strong-name的。创建strong-name的Assembly的步骤大致如下:  
  a)   在命令行运行“sn   -k   keyPair.snk”创建一个密钥文件。这里的sn.exe也是.NET附带的一个工具。  
  b)   在VS.NET里面修改“AssemblyInfo.cs”文件:  
  [assembly:   AssemblyDelaySign(false)]    
  [assembly:   AssemblyKeyFile("..\..\keyPair.snk")]    
  c)   编译项目,就能得到一个strong-name的Assembly。  
   
  MSDN中有一些对GAC的介绍,您可以参考:  
  1)《Assembly   Cache   Viewer   (Shfusion.dll)》  
  2)《Global   Assembly   Cache》  
   
  .NET   Framework中附带了一些和GAC有关的工具,其中包括:  
  1)Gacutil.exe,一个命令行的工具,用于在GAC中浏览、添加、删除Assembly  
  2)Ngen.exe,也是一个命令行的工具,用于在GAC中创建Native   Image  
  3)mscorcfg.msc,一个MMC终端,可以图形化完成Gacutil.exe的主要功能。

分享到:
评论

相关推荐

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

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

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

    若要使程序集可供多应用共享,需将其放入全局程序集缓存(GAC)。GAC中的程序集必须具有强名称,即附加了版本信息、区域性(如果适用)和公钥token的唯一标识,这确保了程序集的安全性和版本控制。要将程序集放入GAC...

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

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

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

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

    Visual Studio GAC 到全局 工具

    其中,全局程序集缓存(Global Assembly Cache, 简称GAC)是一个系统级别的组件,用于存储.NET Framework中的共享组件。GAC的主要目的是为了在多个应用程序之间共享和管理公共的、强命名的.NET组件,以提高性能和...

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

    全局程序集缓存(GAC)是一个特殊的文件夹,用来存储程序集以便于多个应用程序共享。当需要在多个应用程序间共享同一个程序集时,或者当程序集需要为全局范围内的应用程序访问时,将程序集安装到GAC是一个常见的做法...

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

    全局程序集缓存(GAC,Global Assembly Cache)是.NET Framework提供的一种机制,用于存储共享的、强命名的程序集,这些程序集可以被多个应用程序域(AppDomain)同时访问。GAC中的程序集具有唯一性,确保了不同版本...

    gacutil.exe

    Gacutil.exe,即全局程序集缓存工具,是微软提供的一个命令行实用工具,它允许开发者对GAC进行操作,包括安装、卸载、查询和列出GAC中的程序集。 **一、Gacutil.exe的主要功能** 1. **安装程序集到GAC**:使用`/i`...

    VS2003中设计强名称程序集并制作安装入GAC的MSI

    - **全局程序集缓存 (GAC)**:GAC是.NET框架提供的一种存储位置,用于存放受管理的程序集。这些程序集可以从GAC中被任何需要它们的应用程序所共享。将程序集放置于GAC中意味着它可以被多台计算机上的多个应用程序...

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

    首先,程序集的加载会考虑多种因素,如配置文件中的设置、全局程序集缓存(GAC)以及应用程序的私有目录。`LoadAWithPartialName`方法允许开发者仅提供程序集的文本名称,也可以包含公钥标记、版本号或区域性信息,...

    .NET的DLL文件强命名后加入程序集缓存

    1. **唯一名称**:这是由程序员指定的简单字符串,必须在全局程序集缓存(GAC)中是唯一的。 2. **版本信息**:包括主要和次要版本号、修订号和构建号,用于区分不同版本的程序集。 3. **公钥/私钥对**:用于签名...

    关于运行.net程序出现“未能加载文件或程序集stdole, Version=7.0.3300”问题.doc

    3. **GAC(全局程序集缓存)问题**:stdole是系统级别的组件,通常会被安装到全局程序集缓存(GAC)中。如果GAC中的stdole程序集损坏或被错误地移除,也会导致此问题。 4. **依赖项冲突**:程序可能依赖于其他第三...

    Visual Studio 未能加载文件或程序集解决方案

    3. **GAC(全局程序集缓存)问题**:如果程序集是从全局程序集缓存(Global Assembly Cache, GAC)加载的,确保所需程序集已正确安装在GAC中,并且版本匹配。可以使用`gacutil`命令行工具来检查GAC中的内容。 4. **...

    关于程序集清单定义与程序集引用不匹配的错误

    - **检查依赖项**:确保所有依赖项都已正确安装并在GAC(全局程序集缓存)或项目目录中可用。也可以使用Dependency Walker或Visual Studio的“添加引用”对话框来检查依赖关系。 - **清理并重新构建**:清理项目,...

    C#连接Oracle的引用.rar

    如果手动添加,需确保该DLL文件位于项目的引用路径下或GAC全局程序集缓存中。 4. **连接字符串** 要连接Oracle数据库,需要创建一个连接字符串。连接字符串通常包含数据库服务器、端口、服务名、用户名和密码等...

    Gac

    标题中的"Gac"指的是全局程序集缓存(Global Assembly Cache),它是.NET Framework中一个重要的组件。全球程序集缓存是一个系统范围内的存储区域,用于存放共享的.NET程序集,这样多个应用程序可以共用这些程序集,...

    未能加载文件或程序集microsoft.sqlserver.management.sdk.sfc,Version=11.0

    4. **GAC(全局程序集缓存)问题**:如果程序集没有正确地安装到全局程序集缓存,或者GAC中的版本不匹配,也可能引发此错误。 5. **依赖项问题**:其他依赖的程序集可能也未正确安装或更新,这可能导致`microsoft....

Global site tag (gtag.js) - Google Analytics