如何使用C#获取GAC的位置?

如何使用C#获取GAC 目录的位置?

在Windows注册表中存在一个条目?

UPDATE

我需要该位置,因为,我想枚举和分析位于GAC中的程序集。

再见。

如果你想枚举GAC中的东西(例如编写系统管理工具),你最好的选择就是使用fusion.dll,尽管这需要一些互操作代码。

链接到Microsoft以获取Fusion.DLL文档

它位于%windir%\ Assembly文件夹中。

就代码示例而言,Dan首先得到了答案。

是不是总是%windir%\assembly

编辑:

 c:\Windows>dir \windows\assembly Volume in drive C has no label. Volume Serial Number is C8BC-2EBD Directory of c:\windows\assembly 08/14/2009 03:06 AM  GAC 07/28/2009 03:07 AM  GAC_32 09/08/2009 10:57 PM  GAC_MSIL 08/15/2009 07:35 PM  NativeImages_v2.0.50727_32 09/08/2009 10:57 PM  temp 09/08/2009 09:47 PM  tmp 0 File(s) 0 bytes 6 Dir(s) 4,560,822,272 bytes free 

手动访问GAC的绝对正当理由就像文件夹一样。 当然,人们应该意识到操纵那里的风险。 但我会说,只读访问是相当不错的。

除了提到的%windir%\ assembly之外,Nir Sofer可能已经为您完成了这项工作。 他写过GACView 。

嘿,它甚至有一个function来禁用资源管理器中的特殊视图:在资源管理器中选项/禁用程序集查看器。 然后该文件夹将显示为普通文件夹。 虽然这在Windows XP上运行良好,但它不适用于Windows 7 64 Bit,因为它将其设置在32位版本的注册表中。 要在Windows 7 64位上禁用程序集查看器,请启动Regedit(64位),转到

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion 

并添加一个名为DisableCacheViewer的新DWORD值为1。

要独立于目录(可能更改),您可以通过Fusion注册表项枚举程序集:

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\GACChangeNotification\Default 

我想这就是GACView内部工作的方式。 但它仍然不会枚举%windir%\ Microsoft.NET \ assembly中的.NET 4程序集。

支持.NET 4的工具是GACBrowser ,但它显示的信息较少。

让运行时管理它的程序集并相信它们会在那里。 如果你需要安装一些使用gacutil。 如果你需要卸载一些东西使用gacutil。 如果需要访问程序集,请在项目中添加对它的引用。 如果您需要在其他人的机器上与GAC进行交互,请执行@Dan所说的并使用MSI和朋友。

否则请勿触摸GAC