我必须处理一个包,它将程序集直接安装到GAC中(例如,在%windows%/ assembly中的某个地方).
如何将实际程序集(DLL)从GAC驱动到普通文件系统?
谢谢.
我使用本文中的建议从GAC获取程序集.
从GAC中获取DLL
一旦部署在GAC(通常位于c:\ windows\assembly)中的DLL就无法查看或用作普通的DLL文件.它们不能直接从VS项目中引用.开发人员通常会保留原始DLL文件的副本,并在开发(设计)时在项目中引用它,该文件在项目运行期间使用GAC中的程序集.
在执行(运行时)期间,如果发现程序集在GAC中被签名和部署,则CLR会自动从GAC中获取程序集,而不是在VS中设计时引用的DLL.如果开发人员删除了原始DLL或由于某种原因没有它,有一种方法可以从GAC获取DLL文件.按照以下步骤从GAC复制DLL
运行regsvr32/u C:\ WINDOWS\Microsoft.NET\Framework\v2.0.50727\shfusion.dll
shfusion.dll是一个资源管理器扩展DLL,它为GAC文件夹提供了独特的外观.取消注册此文件将删除程序集缓存查看器,然后GAC文件夹将显示为资源管理器中的任何普通文件夹.
打开"%windir%\ assembly\GAC_MSIL".
浏览到你的DLL文件夹深入找到你的DLL.
将DLL复制到硬盘上的某个位置,并从项目中的那里引用它
运行"regsvr32%windir%\ Microsoft.NET\Framework\<.NET版目录>\shfusion.dll"以重新注册shfusion.dll文件并重新获得GAC的原始独特视图.
这里描述的方法非常简单:
http://andreasglaser.net/post/2008/08/05/Extract-assembly-from-Global-Assembly-Cache-(GAC)-with-network-drive-mapping.aspx
文章摘要:
映射网络驱动器(资源管理器 - >工具)
映射到\ servername\folder(\\YourServer\C$\Windows\Assembly
)
如果您是管理员,则无需共享
浏览到驱动器并解压缩组件
打开命令提示符并键入:
cd c:\windows\assembly\GAC_MSIL xcopy . C:\GacDump /s /y
这应该是整个GAC的转储
请享用!
是.
添加DisableCacheViewer注册表项
在HKLM\Software\Microsoft\Fusion \下创建一个名为DisableCacheViewer的新dword键,并将其[DWORD]值设置为1.
返回Windows资源管理器到程序集文件夹,它将是普通的文件系统视图.
我认为最简单的方法是通过像David提到的命令行来完成它.唯一的技巧是.dll不仅仅位于C:\ Windows\Assembly.您必须导航到C:\ Windows\Assembly\GAC\[ASSEMBLY_NAME]\[VERSION_NUMBER] _ [PUBLIC KEY].然后,您可以使用以下方法复制:
复制[ASSEMBLY_NAME] .dll c:\(或您想要的任何位置)
希望有所帮助.
我找到的简单方法是打开命令提示符并浏览您提到的文件夹,直到找到所需的DLL - 然后您可以使用copy命令将其删除.Windows资源管理器具有此文件夹的"有用"特殊视图.
打开RUN然后键入%windir%\assembly\GAC_MSIL
,这将在文件夹视图中打开您的dll然后您可以导航到您的DLL命名文件夹并打开它,您将找到您的DLL文件并轻松复制它