GAC - 要将程序集添加到 GAC,拖放可以,但复制和粘贴不行?为啥?

Posted

技术标签:

【中文标题】GAC - 要将程序集添加到 GAC,拖放可以,但复制和粘贴不行?为啥?【英文标题】:GAC - To add an assembly to the GAC, drag and drop works, but copy and paste doesn't? Why?GAC - 要将程序集添加到 GAC,拖放可以,但复制和粘贴不行?为什么? 【发布时间】:2011-07-03 21:06:07 【问题描述】:

我想知道为什么拖放有效,而复制粘贴无效。复制和粘贴没有发生的拖放发生了什么?

【问题讨论】:

是时候忘记这件事了。 shell 扩展不适用于 .NET 4.0,并且 GAC 不再位于 c:\windows\assembly LOL 不幸的是,我仍然支持目前仍为 2.0 的客户端应用程序。很高兴知道这与 4.0 不同。 【参考方案1】:

当您将程序集拖放到 C:\windows\assembly 文件夹中时,它并没有真正被复制到那里 - 一个特殊的 Windows 资源管理器插件调用 gacutil 将您的程序集安装到 GAC 中。

这个资源管理器插件可能会让人感到困惑,因为它可能会让人产生一种错觉,即 GAC 只是一个包含大量 DLL 的简单文件夹。 其实是一个层次结构,每个程序集名称都有一个文件夹,里面有不同版本的文件夹,以此类推。

如果您想查看真实 GAC 结构,请在 Windows 注册表中打开 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion 并将 DWORD DisableCacheViewer 设置为 1。这将禁用使 GAC 看起来如此简单的 Cache Viewer 插件(但它也会使拖放安装无法使用——您必须自己致电gacutil)。当然,如果您不想弄乱注册表设置,也可以使用其他文件管理器或控制台。

至于复制粘贴不起作用的原因,我相信设计缓存查看器插件的人都认为拖放是一个很好的比喻在GAC中放置东西,而实现复制并且粘贴确实会让 GAC 看起来像一个普通文件夹——它不是

【讨论】:

【参考方案2】:

感谢丹·阿布拉莫夫: 我在上面添加了一些东西

问题:复制和粘贴在程序集下无法安装新的 dll(C:\windows\assembly 文件夹)

Ans:- 您可以通过 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion 下的字符串“DisableCacheViewer”DWORD 更改注册表项来查看文件夹架构,使其为“1”

这样你就可以看到同一个文件夹下的视图了。

您可以通过实用程序转储所有其他程序集 Dll 打开 CMD 并在下面键入以使用实用程序 用于安装 "gacutil /i .dll"

用于卸载 "gacutil /u .dll"

如果您需要安装/卸载多个程序集以便您可以使用

/il

/ul

选项

最好的是 你可以制作一个批处理文件并在下面运行 “C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin” 一次

谢谢 阿舒托什·索尼

【讨论】:

以上是关于GAC - 要将程序集添加到 GAC,拖放可以,但复制和粘贴不行?为啥?的主要内容,如果未能解决你的问题,请参考以下文章

将 DLL 安装到全局程序集缓存(GAC)

如何从 GAC 中提取程序集?

在 GAC 注册的消费程序集

何时以及何时不安装到 GAC 中?

将策略文件添加到 GAC 时出错

确定是不是正在使用 GAC 和 NGen 的程序集