2011-06-08 40 views
3

對於一個小小的C#編譯器,我需要找到System.dll,System.Xml.dll等標準.NET程序集的路徑以及「添加引用」中的「.NET」選項卡下列出的幾乎所有組件。 Visual Studio中的窗口(2010)。
我會使用絕對路徑,但我有一種感覺,這可以打破在特殊情況下。查找標準.NET程序集的位置?

+0

你正在編寫自己的編譯器嗎? – tomasmcguinness 2011-06-08 15:25:39

+0

我相信你想要做的是在GAC中列出程序集。我沒有示例代碼來演示,但是,ILSpy執行此任務並且源代碼可用。也許你可以從中提取它。 http://wiki.sharpdevelop.net/ILSpy.ashx – 2011-06-08 15:30:38

+0

@tomasmcguinness這不是我說的第一件事嗎? – Vercas 2011-06-08 15:36:32

回答

4

這些都存儲在GAC中%WINDIR%\assembly,您可以在Windows資源管理器中查看它們。

實際的dll可以在GACGAC_32GAC_MSIL文件夾的子文件夾中找到,看似依賴於它們的版本。在我的機器上,我有另外三個NativeImages文件夾,它們似乎也包含GAC'd dll。

Windows資源管理器不允許你直接瀏覽這些文件夾(據我所知),但你可以通過命令提示符來到那裏。

在GAC一個DLL的完整路徑是

%WINDIR%\assembly\GACFOLDER\FILENAME\VERSION__PUBLICKEYTOKEN\FILENAME.dll

例如在我的機器的System.Xml.dll不同的版本可以在C:\WINDOWS\assembly\GAC_MSIL\System.Xml\2.0.0.0__b77a5c561934e089 C:\WINDOWS\assembly\GAC\System.Xml\1.0.5000.0__b77a5c561934e089 C:\WINDOWS\assembly\NativeImages1_v1.1.4322\System.Xml\1.0.5000.0__b77a5c561934e089_2775eea1 C:\WINDOWS\assembly\NativeImages1_v1.1.4322\System.Xml\1.0.5000.0__b77a5c561934e089_4c5fbb92

+0

GAC是否有路徑變量? GAC程序集是否始終存儲在c:\ windows \ assembly中? – 2011-06-08 15:27:18

+0

我已經更新了我的答案,使用Windows目錄的路徑變量。 – 2011-06-08 15:29:15

+0

謝謝!在這個文件夾中查看我已經看到了真正程序集的路徑......我可能會使用這些! – Vercas 2011-06-08 15:40:31

1

大部分是在GAC中,這是我相信你將被要求看你自己的編譯器中找到。在編譯器等方面提供幫助的文檔是在舊版本.NET Framework下的tools開發者文件夾下找到的。

我不會完全不利於對文件夾「硬編碼」本身,但是您將被鎖定到特定版本。我並不是建議這是正確的方法,但.NET的位置不可能改變,而且很可能您的編譯器停留在特定版本中。如果你走這條路線......爲了在各種機器上安全起見,你應該使用%WINDIR%來確定Windows的安裝位置(如果你從未使用過這個命令並且想要查看變量是什麼,請在命令提示符下試試cd%WINDIR%一樣)。學術演練結束了。

有一點需要注意的是,通過檢查「編譯器作爲服務」的方向,MS正在vNext(?)中前進,可以更好地爲您嘗試的某些內容提供服務。這個想法/功能已經出現在Mono(開源.NET)中。

4

編譯時,您可以使用引用程序集下%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETFramework

另見(HKEY_LOCAL_MACHINE|HKEY_CURRENT_USER)\SOFTWARE\Microsoft\.NETFramework(HKEY_LOCAL_MACHINE|HKEY_CURRENT_USER)\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders下的註冊表項,通過KB306149作爲記錄。

GAC更多用於運行時使用。