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

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

除了创建文件夹结构并将程序集放入其中之外,以上两种方法是否还有其他特殊操作呢?


2
在进行实验之前,请备份。 - H H
1
最近重温了这个任务,我放弃了使用应用程序/脚本的想法,转而使用了MSI文件,非常干净利落! - Ken
使用 GacInstall("Foo.dll") 代替 GACInstall("Foo.dll") - Behzad Ebrahimi
2个回答

11

强烈建议使用现有的方法(如你所提到的方法),因为它们得到了微软的支持和维护,并且将在未来的版本中继续发挥作用。

通过Process Monitor快速查看gacutil.exe,发现其中涉及一些细节问题:

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

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


5

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


类似于我们所做的,我们使用Visual Studio来构建.msi安装项目。 - TrueWill
谢谢。最终采用了MSI方法。 - Ken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接