以编程方式将.NET程序集安装到GAC中的方法

时间:2009-09-22 15:30:45

标签: .net install gac global-assembly-cache

我需要创建一个小应用程序或脚本来将.NET程序集安装到GAC中。我读过有几种方法可以做到这一点,包括:

  • 使用gacutil.exe
  • 执行以下代码行:

    new System.EnterpriseServices.Internal.Publish().GACInstall("Foo.dll");

但是,如果我只是在机器上创建了相应的目录并将程序集复制到该目录中会发生什么? GAC目录的结构如下:C:\Windows\assembly\GAC_MSIL\Foo\<version#>__<public token>\Foo.dll

除了创建文件夹结构并将程序集放入其中之外,上述两种方法是否有任何特殊之处?

2 个答案:

答案 0 :(得分:11)

强烈建议使用现有方法(例如您提到的方法),因为它们都受Microsoft支持和维护,并将继续与未来版本一起使用。

使用Process Monitor快速查看gacutil.exe表明,除了复制文件之外,还有更多内容:

  • 并发问题(例如临时文件,锁定WINDOWS\assembly\GACLock.dat等)
  • 通知(例如HKLM\SOFTWARE\Microsoft\Fusion\GACChangeNotification\...
  • 索引(例如HKLM\SOFTWARE\Microsoft\Fusion\NativeImagesIndex...
  • 验证(例如强名称,......)

System.EnterpriseServices中的包装器与this old blog post非常相似,应该可以正常工作。

答案 1 :(得分:5)

我们最近不得不在企业环境中为10个服务器执行此操作。我们使用Wix构建了一个非常简单的MSI(认真 - 5分钟工作)并通过组策略发布到所有服务器(和开发盒)。