调试器不附加到进程

Ale*_*dru 7 .net c# debugging mmc visual-studio

我有一个MMC管理单元,我正在尝试调试.目前,放置在管理单元的构造函数中的以下代码在将调试器附加到它上方起作用:

public MySnapIn()
{
#if DEBUG
    if (!Debugger.IsAttached)
    {
        Debugger.Launch();
    }
#endif
    ...
}
Run Code Online (Sandbox Code Playgroud)

但总是要将调试器附加到Visual Studio真的很烦人.我想自动化这个过程.理想情况下,我只需要按F5并自动附加调试器.我尝试过以下方法:

  • 项目属性 - >启动外部程序 - >输入"C:\ Windows\System32\mmc.exe"
  • 项目属性 - >命令行参数 - >给它一个.msc文件的路径(存储管理单元布局,这样每次都可以更容易地加载它,这样你就不必总是文件 - >添加/删除SNAP-IN).

这没用.调试器不会自动附加.如何自动执行此过程,或阻止调试器自动附加?

Ale*_*dru 6

刚刚得到它.事实证明,你必须在64位系统(我所使用的)上使用32位MMC启动器,然后将-32标志添加到"命令行参数"以强制它保持在32-位模式:

  • 确保我的管理单元项目针对Configuration Manager中的任何CPU.
  • 项目属性 - >启动外部程序 - >输入"C:\ Windows\SysWOW64\mmc.exe"
  • 项目属性 - >命令行参数 - >给它一个.msc文件的路径,还有-32标志(存储管理单元布局,这样每次都可以更容易地加载它,所以你不总是有到文件 - >添加/删除管理单元.

  • `"C:\ Windows\SysWOW64\mmc.exe"`虽然名称在标题中有64个,但该文件夹实际上是32位版本程序所在的位置,因此您运行的是32位启动程序,而不是64位.如果您运行的是64位应用程序,则64位版本位于"C:\ Windows\System32"中;如果运行32位应用程序,则位于"C:\ Windows\sysnative"(如果运行的话,System32将重定向到SysWOW64 32位应用程序) (3认同)