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

如何在Windows资源pipe理器窗口中使用C#打开C:\windows\assembly\gac_msil

说明:当我在开发环境中将程序集部署到GAC时,我喜欢将.pdb符号文件部署到与位于C:\Windows\assembly\GAC_MSIL\AssemblyName\Version__PublicKeyToken\的程序集相同的目录。 这样,如果我想附加Visual Studiodebugging器,它会自动find符号文件。

我已经构build了一个小工具,用于检测何时将一个程序集添加到GAC,并希望它显示一个button,以便为我打开目录。 我有button和path,但启动一个进程启动explorer.exe与path不起作用。 我知道在Windows中打开这个目录的唯一方法是通过运行对话框。

您不能在资源pipe理器中使用命令行命令:explorer.exe "C:\Windows\assembly\GAC_MSIL..." 。 只有在“运行”对话框中inputpath。 那么我该如何做“运行”对话框呢?

正如Hans Passant曾经回答的那样,旧的GAC由一个屏蔽了目录结构的外壳扩展来显示。 这是为了确保GAC中的程序集得到妥善管理。 打开目录结构是故意不支持的。 在.NET 4中,不再是这种情况,所以如果你可以升级,那就是要走的路。

以编程方式打开旧的GAC有几个选项,但再次,它通常被掩盖的原因。 选项:

  1. 卸下外壳的扩展。 您可以取消注册Shfusion.dll,打开目录,然后重新注册它。 当然,这可能会出现问题,并将Shfusion.dll永久取消注册。 这将允许其他用户自由地混淆GAC目录结构和文件,这将导致其无效并且与注册表不同步。

  2. 禁用外壳扩展。 HKLM Fusion注册表项可以具有DisableCacheViewer DWORD值。 设置为1时,将禁用视图。 键可以设置为1,窗口打开,然后键可以设置为0.这种方法的风险与选项1相同。另外,作为其评论似乎已被删除的用户(Damien)指出,其他进程也可能使用这个全局键导致竞态条件=坏。

  3. 使用Total Commander(感谢Csaba Toth)或Far Manager之类的第三方应用程序来查看目录结构,而不是Explorer。 这里的缺点是,假设他们甚至可以接受让他们打开GAC目录的参数,那么需要在任何地方安装我想运行我的应用程序的软件。

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