簡體   English   中英

從C#打開C:\\ windows \\ assembly \\ gac_msil

[英]Open C:\windows\assembly\gac_msil from C#

如何使用C#在Windows資源管理器窗口中打開C:\\windows\\assembly\\gac_msil

說明:在我的開發環境中將程序集部署到GAC時,我喜歡將.pdb符號文件部署到與位於C:\\Windows\\assembly\\GAC_MSIL\\AssemblyName\\Version__PublicKeyToken\\的程序集相同的目錄中。 這樣,如果我想附加Visual Studio調試器,它會自動找到符號文件。

我已經構建了一個小實用程序來檢測何時將我的一個程序集添加到GAC中,並且我希望它顯示一個按鈕,為我彈出打開目錄。 我有按鈕和路徑,但啟動一個啟動explorer.exe與路徑的進程不起作用。 我知道在Windows中打開此目錄的唯一方法是通過“運行”對話框。

您無法在資源管理器中或使用命令行命令訪問它:explorer.exe "C:\\Windows\\assembly\\GAC_MSIL..." 僅當您在“運行”對話框中鍵入路徑時。 那么我該怎么做Run對話框呢?

正如Hans Passant曾經回答的那樣,舊的GAC由一個shell擴展顯示,它掩蓋了目錄結構。 這是為了確保正確管理GAC中的程序集。 故意不支持打開目錄結構。 在.NET 4中,情況已經不再如此,所以如果你可以升級,那就是你要走的路。

要以編程方式打開舊GAC,有一些選項,但同樣,它通常會被掩蓋是有原因的。 選項:

  1. 刪除shell擴展。 您可以取消注冊Shfusion.dll,打開目錄,然后重新注冊。 當然,這可能會出錯並讓您將Shfusion.dll永久取消注冊。 這將允許其他用戶自由地處理GAC目錄結構和文件,這將導致它變得無效並與registry = bad不同步。

  2. 禁用shell擴展。 HKLM Fusion注冊表項可以具有DisableCacheViewer DWORD值。 設置為1時,將禁用視圖。 密鑰可以設置為1,窗口打開,然后密鑰可以設置回0.這種方法與選項1具有相同的風險。此外,作為用戶(Damien)的評論似乎已被刪除指出,其他進程也可能使用此全局密鑰導致競爭條件=壞。

  3. 使用Total Commander(感謝Csaba Toth)或遠程管理器等第三方應用程序來查看目錄結構而不是資源管理器。 這里的缺點是,假設他們甚至可以接受允許他們打開GAC目錄的參數,那么需要在我想運行我的應用程序的任何地方安裝該軟件。

如果您正在考慮使用選項1或2,請注意在大多數情況下它們都是一個壞主意,除非您正在使用自己的機器,否則應該避免使用它們。 此目錄結構與注冊表同步,不應直接編輯。 使用Gacutil.exe管理GAC中的程序集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM