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

时间:2009-10-12 21:50:52

标签: c# .net gac

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

Windows注册表中是否存在条目?

更新

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

再见。

5 个答案:

答案 0 :(得分:5)

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

Link to Microsoft for Fusion.DLL Documentation

答案 1 :(得分:1)

是不是总是%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    <DIR>          GAC
07/28/2009  03:07 AM    <DIR>          GAC_32
09/08/2009  10:57 PM    <DIR>          GAC_MSIL
08/15/2009  07:35 PM    <DIR>          NativeImages_v2.0.50727_32
09/08/2009  10:57 PM    <DIR>          temp
09/08/2009  09:47 PM    <DIR>          tmp
               0 File(s)              0 bytes
               6 Dir(s)   4,560,822,272 bytes free

答案 2 :(得分:1)

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

Dan尽管得到了代码示例的答案。

答案 3 :(得分:1)

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

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\GACChangeNotification\Default

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

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

答案 4 :(得分:0)

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

否则请勿触及GAC