C# 从C打开C:\windows\assembly\GACmsil#

C# 从C打开C:\windows\assembly\GACmsil#,c#,windows,gac,explorer,C#,Windows,Gac,Explorer,如何使用C在windows资源管理器窗口中打开C:\windows\assembly\gac#msil 说明:在开发环境中将程序集部署到GAC时,我喜欢将.pdb符号文件部署到与位于C:\Windows\assembly\GAC\u MSIL\AssemblyName\Version\uu PublicKeyToken\的程序集相同的目录。这样,如果我想附加VisualStudio调试器,它会自动查找符号文件 我已经建立了一个小实用程序,当我向GAC中添加一个程序集时,它会检测到,我希望它显示一

如何使用C在windows资源管理器窗口中打开
C:\windows\assembly\gac#msil

说明:在开发环境中将程序集部署到GAC时,我喜欢将.pdb符号文件部署到与位于
C:\Windows\assembly\GAC\u MSIL\AssemblyName\Version\uu PublicKeyToken\
的程序集相同的目录。这样,如果我想附加VisualStudio调试器,它会自动查找符号文件

我已经建立了一个小实用程序,当我向GAC中添加一个程序集时,它会检测到,我希望它显示一个按钮,为我打开目录。我有按钮和路径,但是启动一个进程来启动带有该路径的explorer.exe不起作用。据我所知,在Windows中打开此目录的唯一方法是通过“运行”对话框


您无法在资源管理器内或使用命令行命令访问它:explorer.exe
“C:\Windows\assembly\GAC\u MSIL…”
。仅当在“运行”对话框中键入路径时。那么我该如何做Run对话框正在做的事情呢?

正如Hans Passant曾经回答的那样,旧的GAC由一个外壳扩展显示,它屏蔽了目录结构。这是为了确保GAC中的程序集得到正确管理。故意不支持打开目录结构。在.NET4中,情况已不再如此,因此,如果您可以升级,那就是最好的选择

要以编程方式打开旧的GAC,有几个选项,但同样,它通常会因为某种原因而被屏蔽。选项:

  • 拆下外壳延伸件。您可以注销Shfusion.dll,打开目录,然后重新注册。当然,这可能会出错,导致Shfusion.dll永久未注册。这将允许其他用户随意干扰GAC目录结构和文件,这将导致它变得无效并与registry=bad不同步

  • 禁用shell扩展。HKLM Fusion注册表项可以具有DisableCacheViewer DWORD值。设置为1时,将禁用视图。可以将键设置为1,打开窗口,然后将键设置回0。这种方法的风险与选项1相同。此外,正如其注释似乎已被删除的用户(Damien)所指出的,其他进程也可能使用此全局键,从而导致竞争条件=坏

  • 使用第三方应用程序,如Total Commander(感谢Csaba Toth)或Far Manager来查看目录结构,而不是资源管理器。这里的缺点是,假设他们甚至可以接受参数以允许他们打开GAC目录,那么就需要在我想运行我的应用程序的任何地方安装该软件


  • 如果您正在考虑使用选项1或2,请注意,在大多数情况下,它们都是一个坏主意,应该避免使用,除非您正在摆弄自己的机器。此目录结构与注册表同步,不应直接编辑。使用Gacutil.exe管理GAC中的程序集。

    还可以查看DEVPATH环境变量,它可能对您有用,特别是如果您想调试第三方DLL或覆盖某些部分:太棒了!我想我可能会得到一些有用的提示。以这种方式使用时是否授予程序集完全信任?旧的GAC由shell扩展显示。无论你对它做什么来禁用它,都不是你可以在你部署的机器上做的事情,你不需要搞乱它,我拥有它。你的答案怎么了?它消失了。为了记录,我让它工作了,但最终允许将.pdb拖放到我的窗口中,将其复制到GAC文件夹中。这样就不需要黑客了。更正:Hans使用了
    Far管理器
    。他提到了诺顿指挥官,但正如提到“档案指挥官”运动一样,诺顿指挥官是DOS的,其他指挥官是DOS的衍生产品。相应更新。谢谢