10

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

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

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

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

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

4

2 回答 2

11

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

快速浏览一下Process Monitorgacutil.exe会发现它不仅仅是复制文件:

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

包装器与这篇旧博客文章System.EnterpriseServices非常相似,应该可以正常工作。

于 2009-09-22T17:23:15.313 回答
5

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

于 2009-09-22T17:36:59.390 回答