如何从GAC中提取程序集?
有一个我必须处理的包直接进入GAC的组件(例如,%windows%/ assembly的深处)。
如何从GAC驱动实际的程序集(DLL)到正常的文件系统?
谢谢。
我使用了本文的build议从GAC获得了一个程序集。
从GAC获取DLL
曾经部署在GAC中的DLL(通常位于c:\ windows \ assembly)不能被看作是一个普通的DLL文件。 他们不能直接引用VS项目。 开发人员通常保留原始DLL文件的副本,并在开发(devise)时间的项目中引用该项目,该项目在运行时使用来自GAC的程序集。
在执行期间(运行时),如果程序集被发现在GAC中签名和部署,CLR将自动从GAC中拿起程序集,而不是在VS中的devise时引用该程序集。 如果开发人员删除了原始的DLL或没有出于某种原因,有一种方法可以从GAC获取DLL文件。 按照以下步骤从GAC复制DLL
运行regsvr32 / u C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ shfusion.dll
- shfusion.dll是一个浏览器扩展DLL,它给了GAC文件夹一个独特的外观。 取消注册此文件将删除程序集caching查看器,然后GAC文件夹将作为资源pipe理器中的任何常规文件夹可见。
打开“%windir%\ assembly \ GAC_MSIL”。
浏览到您的DLL文件夹深入find您的DLL。
将DLL复制到硬盘上的某个位置,然后从您的项目中引用它
运行“regsvr32%windir%\ Microsoft.NET \ Framework \ <.NET版本目录> \ shfusion.dll”来重新注册shfusion.dll文件,并重新获得GAC的独特视图。
这里描述的方法非常简单:
文章摘要:
- 映射networking驱动器(资源pipe理器 – >工具)
- 映射到\ servername \文件夹(
\\YourServer\C$\Windows\Assembly
)
- 映射到\ servername \文件夹(
- 如果您是pipe理员,则无需共享
- 浏览到驱动器并提取您的组件
打开命令提示符并键入:
cd c:\windows\assembly\GAC_MSIL xcopy . C:\GacDump /s /y
这应该给整个GAC的转储
请享用!
是。
添加DisableCacheViewerregistry项
使用名称DisableCacheViewer在HKLM \ Software \ Microsoft \ Fusion \下创build一个新的DWORD键,并将其[DWORD]值设置为1。
回到Windows资源pipe理器的程序集文件夹,它将是普通的文件系统视图。
我认为最简单的方法就是像David提到的那样通过命令行来完成。 唯一的技巧是.dll不是简单地位于C:\ Windows \ Assembly。 您必须导航到C:\ Windows \ Assembly \ GAC \ [ASSEMBLY_NAME] \ [VERSION_NUMBER] _ [PUBLIC KEY]。 然后您可以使用以下方法进行复制:
复制[ASSEMBLY_NAME] .dll c:\(或者任何您想要的位置)
希望有所帮助。
我find的简单方法是打开命令提示符并浏览您提到的文件夹,直到find所需的DLL – 然后可以使用复制命令将其解开。 Windows资源pipe理器具有该文件夹的“有用的”特殊视图。
我是PowerShell GAC的作者。 借助PowerShell GAC,您可以从GAC中提取程序集,而不依赖于GAC内部结构,如更改文件夹结构。
Get-GacAssembly SomeCompany* | Get-GacAssemblyFile | Copy-Item -Dest C:\Temp\SomeCompany
这篇MSDN博客文章描述了从GAC中提取DLL的三种独立方式。 迄今给出的方法的一个有用的总结。
改用文件浏览器“Total Commander”。
- 启用Total Commander中的“显示隐藏/系统文件”设置
- 浏览到“c:\ windows \ assembly”
- 复制
从Powershell脚本,你可以试试这个。 我在GAC中只有一个版本的程序集,所以这工作得很好。
cd "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\" Get-ChildItem assemblypath -Recurse -Include *.dll | Copy-Item -Destination "c:\folder to copy to"
assemblypath可以使用通配符。
只需导航到C:\ Windowsfind[程序集]文件夹右键单击并select添加到存档
等一下
您有一个包含GAC中所有程序集的归档文件
想想我想出了一种在GAC内部查看的方式,无需修改registry或使用命令行,PowerShell或其他程序:
创build一个新的快捷方式(到任何地方)。 然后修改快捷方式使目标成为:
%windir%\assembly\GAC_MSIL\System
打开这个快捷方式会把你带到GAC里面的系统文件夹(每个人都应该拥有这个文件夹),并且有一个奇妙的副作用,让你切换到更高的目录,然后浏览到你想要的任何其他文件夹(并查看dll文件等)
我在Windows 7和Windows Server 2012上testing了这个。
注意:创build快捷方式时,不会让您使用该目标,但可以让您对其进行编辑。
请享用!
打开运行,然后input%windir%\assembly\GAC_MSIL
,这将打开你的dll文件夹的视图,然后导航到你的dll命名文件夹并打开它,你会发现你的dll文件,并轻松地复制
另一个方向 – 只需解压缩MSI文件,并获得这些好东西。 从最终卸载保存您。 。 。
从命令行复制是不必要的。 我从“开始窗口”search中键入了DLL的名称。 我select了查看更多结果。 GAC中的那个在search窗口中返回。 我右键点击它,并说打开文件的位置。 它在正常Windows资源pipe理器中打开。 我复制了文件。 我关上了窗户。 完成。