2009-05-02 58 views

回答

10

我居然发现这个帖子后,我写了我的问题。这是真正的好解释:

你能够看到他们,如果你浏览到

c:\windows\assembly

与资源管理器中,在那里你会看到组件的一个很好的格式化列表。
负责此视图的外壳扩展不仅显示了GAC中的程序集,还显示了使用ngen.exe预编译的程序集的本地版本。
但这些文件实际上并没有存储在这里 - 外壳扩展只是掩盖了它们的真实位置。您可以通过命令提示符导航到同一个目录来查看文件的真实存储位置。
在这个位置有许多子目录,包括一个名为GAC的子目录。这里埋藏着几层哈希代码和程序集名称,它们包含物理程序集以及包含强名称的老式.INI文件。在这个未知领域值得探讨,只是为了了解封面上发生了什么,尽管由于GAC旨在变得不透明,所以要小心做出更改。

2

GAC的物理位置是%WINDIR%下的Assembly目录f.e.

c:\windows\assembly 

您可以使用Explorer或gacutil程序将程序集复制到gac。

3

它们存储在%SYSTEMROOT%一个名为组件文件夹中

在%systemroot%变量是在Microsoft Windows NT和它的衍生物发现了一个特殊的系统范围内的环境变量。它的值是系统文件夹的位置,包括驱动器和路径。

驱动器与%SystemDrive%相同,干净安装的默认路径取决于操作系统的版本。默认情况下,在一个干净的安装:

* Windows NT 5.1 (Windows XP) and newer versions use \WINDOWS 
* Windows NT 5.0 (Windows 2000), Windows NT 4.0 and Windows NT 3.1 use \WINNT 
* Windows NT 3.5x uses \WINNT35 

(维基百科)

1

不,物理组件不存储在“C:\ Windows \ assembly”中。 只有组件的引用存储在那里。 例如,程序集“System.Windows.Forms.dll” (以及.NET Framework程序集的大部分) 物理存储在许多版本的“C:\ Windows \ winsxs”中,已针对多种平台进行了优化 (只需在资源管理器中的“C:\ Windows \ winsxs”并在搜索框中键入“System.Windows.Forms.dll”)。例如,您可以创建强命名程序集,将其注册到GAC,但它的物理位置是您放置程序集文件的位置。 (例如“C:\ Users \%username%\ Documents \ Visual Studio 2008 \ Projects \ YourAssemblyProjectName \ YourAssemblyProjectName \ bin \ Debug” - VS项目默认目录)。 以及更多,在GAC中只是存储了程序集的引用,所以如果您重新构建了在GAC中注册的程序集,那么通过引用GAC引用它的程序集将使用您的程序集,也将使用程序集的重建版本。