28

我想更加熟悉 .Net 全局程序集缓存。网上的各种消息来源说它可以在 Explorer 中找到C:\WINNT\Assembly。但我的Windows XP 机器上似乎没有WINNT文件夹。C:我已选中“显示隐藏的文件和文件夹”并未选中“隐藏受保护的操作系统文件”。

使用如何检测安装了哪些 .NET Framework 版本和服务包中描述的方法? 尤其是在http://msdn.microsoft.com/en-us/kb/kbarticle.aspx?id=318785我看到我安装了 .Net 4.0。

我怎样才能可靠地找到它,为什么它会在任何地方而不是它应该在的地方?

4

2 回答 2

48

作为免责声明,我首先要说的是,您永远不应该直接编辑 GAC 的内容。

继续信息...

您的问题有两种不同的 GAC,2.0 GAC 和 4.0 GAC。在谈论这些时,它们与其说是指 .NET 框架的版本,不如说是指正在使用的 CLR 的版本。恰好在 2.0 中,CLR 为 2,而在 4.0 中,CLR 为 4。作为参考,.Net 3.5 的 CLR 保持在 2,因此 .net 2.0 和 .net 3.5 的 GAC是一样的。

但它在哪里?

2.0 GAC%WINDIR%\Assembly在资源管理器中。对于大多数较新的 Windows 操作系统,默认%WINDIR%C:\Windows。实际上,这实际上是一个隐藏 GAC 真实位置的 shell 扩展,但出于您的目的,您可以打开资源管理器C:\Windows\Assembly来查看 2.0 GAC 的内容。shell 扩展还增加了拖放程序集的好处,C:\Windows\Assembly以便将它们添加到 GAC(在 Win7 及更高版本中必须禁用 UAC。)

4.0 GAC 位于C:\Windows\Microsoft.NET\assembly. 您会在该文件夹下找到各种类型的程序集,这些程序集分为它们的 32 位、64 位或 MSIL 子目录。CLR4 的 gac 没有外壳扩展,因此您正在查看程序集所在的磁盘上的实际位置。

有点跑题了……

我总是以编程方式检测安装了哪些版本的 .Net 框架的方式是查看HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP……子文件夹指示已安装的版本。

于 2013-11-14T15:02:49.463 回答
3

in windows xp, its c:\windows\ and its a hidden folder and can find it by manually typing the directory as where you GAC is (WINNT was .NT 4.0 server or workstation, or windows server 2000, or windows 2000) and if upgraded to windows xp or windows server 2003 WINNT I believe would stay intact only in that scenario, that's what you should use the %windir% global system variable

Im on windows 8.1 64 bit and the gac is still in C:\Windows\assembly

but .net is in c:\windows\Microsoft.NET\ is where the CLR and runtime is

Oddly to the other answer above, it seems I disagree that c:\windows\assembly is the "old gac"

here is my dos results

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\WINDOWS\system32>cd..

C:\Windows>cd assembly

C:\Windows\assembly>dir
Volume in drive C is OS
Volume Serial Number is DE26-14AA

Directory of C:\Windows\assembly

11/01/2013  01:15 PM    <DIR>          GAC
11/14/2013  01:10 PM    <DIR>          GAC_32
11/14/2013  01:10 PM    <DIR>          GAC_64
11/14/2013  01:27 PM    <DIR>          GAC_MSIL
11/13/2013  05:36 PM    <DIR>          NativeImages_v2.0.50727_32
11/10/2013  03:22 AM    <DIR>          NativeImages_v2.0.50727_64
11/14/2013  01:33 PM    <DIR>          NativeImages_v4.0.30319_32
11/13/2013  05:36 PM    <DIR>          NativeImages_v4.0.30319_64
11/14/2013  01:33 PM    <DIR>          temp
11/14/2013  01:32 PM    <DIR>          tmp
           0 File(s)              0 bytes
          10 Dir(s)  27,701,415,936 bytes free

C:\Windows\assembly>

the c:\windows\microsoft.net\assembly I do not think is your Active GAC, I think this is where Visual Studio looks for, when compiling for a specific version x64 or 32 etc, the other c:\windows\assembly is the current state of your machine. but im no expert, just what I see

于 2013-11-14T14:57:32.417 回答