安装在GAC中的组件在哪里实际存储?

时间:2009-05-02 18:42:28

标签: visual-studio assemblies

我想导出项目中构建的程序集。但他们在哪里存放?

4 个答案:

答案 0 :(得分:11)

在我写完问题后,我实际上发现了这篇文章。这真的很好解释:

如果您导航到

,您将能够看到它们

c:\windows\assembly

使用资源管理器,您将看到格式良好的程序集列表。
负责此视图的shell扩展不仅显示GAC中的程序集,还显示使用ngen.exe预编译的程序集的本机版本。
但文件实际上并未存储在这里 - shell扩展只是掩盖了它们的真实位置。您可以通过命令提示符导航到同一目录,查看文件的真正存储位置。
在这个位置有许多子目录,包括一个名为GAC的子目录。这里埋藏着几层哈希码和程序集名称,以及一个包含强名称等老式.INI文件的物理程序集。在这个未知领域内进行探索只是为了了解幕后发生的事情,尽管要注意做出改变,因为GAC意图是不透明的。

答案 1 :(得分: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

(来自维基百科)

答案 2 :(得分:2)

GAC的物理位置是%WINDIR%,f.e。

下的Assembly目录
c:\windows\assembly

您可以使用资源管理器或gacutil程序将程序集复制到gac。

答案 3 :(得分: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引用它)也将使用程序集的重建版本。 / p>