繁体   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