如何从 GAC 中提取程序集?

我必须处理一个包,它直接将程序集安装到 GAC 中(例如,在% windows%/Assembly 中的某个深处)。

如何将实际的程序集(DLL)从 GAC 驱逐到正常的文件系统?

谢谢。

140254 次浏览

我发现的简单方法是打开命令提示符,浏览您提到的文件夹,直到找到您想要的 DLL-然后您可以使用 copy 命令将其取出。文件资源管理器对这个文件夹有一个“有用”的特殊视图。

我使用来自 this article的建议从 GAC 获得一个组装。

从 GAC 获取 DLL

DLL 一次 (通常设于 不能查看 或作为普通 DLL 文件使用 不能直接从 VS 引用 开发人员通常会保存一个 原始 DLL 文件的副本和 在工程项目中参考 开发(设计)时间,它使用 在运行时从 GAC 组装 项目。

在执行期间(运行时) ,如果 程序集被发现已签名,并且 在 GAC 中自动部署 CLR 从 GAC 那里拿装配件 时引用的 DLL 设计时间 开发人员已删除原 DLL 或者因为某些原因没有, 有一种获取 DLL 文件的方法 按照以下步骤 从 GAC 拷贝 DLL

  1. 运行 regsvr32/u C: WINDOWS Microsoft.NET Framework v2.0.50727 shfusion.dll

    • DLL 是一个资源管理器扩展 DLL,它提供了一个独特的 查看 GAC 文件夹,注销 此文件将删除程序集 缓存查看器和 GAC 文件夹将 然后可见作为任何正常的文件夹 在探险家里。
  2. 打开“% windir% Assembly GAC _ MSIL”。

  3. 浏览到您的 DLL 文件夹进入深度查找您的 DLL。

  4. 将 DLL 复制到硬盘上的某个位置,然后在 项目

  5. 运行“ regsvr32% windir% Microsoft.NET Framework < .NET 版本目录 > shfusion.dll 」至 重新注册 shfusion.dll 文件,然后 重新获得... 的独特视角 海关总署

是的。

添加 DisableCacheViewer 注册表项

在 HKLM Software Microsoft Fusion 下创建一个名为 DisableCacheViewer 的新 DWORD 键,并将其[ DWORD ]值设置为1。

返回到文件资源管理器的汇编文件夹,这将是正常的文件系统视图。

这里描述的方法非常简单:

Http://andreasglaser.net/post/2008/08/05/extract-assembly-from-global-assembly-cache-(gac)-with-network-drive-mapping.aspx

摘自文章:

  • 映射网络驱动器(资源管理器-> 工具)
    • 映射到 servername 文件夹(\\YourServer\C$\Windows\Assembly)
  • 如果您是管理员,则无需共享
  • 浏览到驱动器并提取程序集

我认为最简单的方法是像 David 提到的那样通过命令行完成。唯一的诀窍是。Dll 不仅仅位于 C: Windows Assembly。必须导航到 C: Windows 程序集 GAC [ ASSEMBLY _ NAME ][ VERION _ NUMBER ] _ [ PUBLIC KEY ]。然后,你可以使用以下方法进行复制:

Copy [ ASSEMBLY _ NAME ] . dll c: (或任何您想要的位置)

希望能帮上忙。

这篇 MSDN 博客文章描述了从 GAC 中提取 DLL 的三种不同的方法。到目前为止给出的方法的一个有用的总结。

直接导航到 C: Windows 找到[程序集]文件夹 右击并选择 add to archive

等一下

你有一个包含 GAC 中所有程序集的归档文件

打开命令提示符并键入:

cd  c:\windows\assembly\GAC_MSIL


xcopy . C:\GacDump /s /y

这应该能把整个 GAC 的垃圾都扔掉

好好享受吧!

还有一个方向——只要解压 MSI 文件,就可以得到好东西了。使您免于最终卸载. 。

使用文件浏览器“ Total Command”代替。

  1. 在 Total Command 中启用“ show hide/system files”设置
  2. 浏览到“ c: windows 程序集”
  3. 收到

从 Powershell 脚本中,您可以尝试这样做。在 GAC 中我只有一个单一的组装版本,所以这个工作得很好。

cd "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\"
Get-ChildItem assemblypath -Recurse -Include *.dll |  Copy-Item -Destination "c:\folder to copy to"

其中程序集路径可以使用通配符。

我是 PowerShell GAC的作者。使用 PowerShell GAC,您可以从 GAC 中提取程序集,而无需依赖于 GAC 内部结构(如更改文件夹结构)。

Get-GacAssembly SomeCompany* | Get-GacAssemblyFile | Copy-Item -Dest C:\Temp\SomeCompany

不需要从命令行进行复制。我在“开始窗口”搜索中键入了 DLL 的名称。我选择了 See More Results。GAC 里的那个在搜索窗口中被返回了。我点击了它,然后说打开文件位置。它以正常文件资源管理器打开。我复制了文件。我把窗户关上了。成交。

我想我找到了一种不用修改注册表或使用命令行、 powershell 或任何其他程序就可以查看 GAC 内部的方法:

创建一个新的快捷方式(到任何地方)。然后修改快捷方式使目标为:

%windir%\assembly\GAC_MSIL\System

打开这个快捷方式可以让你进入 GAC 中的 System 文件夹(每个人都应该有这个文件夹) ,还有一个很棒的副作用,就是让你切换到一个更高的目录,然后浏览你想要的任何其他文件夹(并查看 dll 文件等)

我在 Windows7和 WindowsServer2012上进行了测试。

注意: 在创建快捷方式时,它不允许您使用该目标,但是它允许您编辑该目标。

好好享受吧!

打开 快跑然后键入 %windir%\assembly\GAC_MSIL,这将打开您的 dll 在文件夹的视图,然后可以导航到您的 dll 命名的文件夹并打开它,您将找到您的 dll 文件和复制它很容易