2009-05-02 46 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引用它的程序集將使用您的程序集,也將使用程序集的重建版本。

相關問題