代码之家  ›  专栏  ›  技术社区  ›  Thiago Loureiro

使用VisualStudio将类库项目附加到外部应用程序

  •  0
  • Thiago Loureiro  · 技术社区  · 8 年前

    我有一个ClassLibrary项目,我需要将其附加到外部应用程序(控制台应用程序)。

    我在这里找到了一些解决方案,精确地解释了我正在做的事情,但在我的情况下,从vs运行它不起作用,看起来我需要一些延迟才能将vs(自动附加)连接到可执行文件

    我尝试执行以下操作,应用程序运行,但未命中断点。

    enter image description here

    但是,如果我手动运行此进程并(等待加载)将我的库附加到此进程,它就会工作,但我们需要自动执行此操作

    我也在这样做,但无论有没有从VisualStudio运行可执行文件,附加(调试)都无法正常工作。

    enter image description here

    2 回复  |  直到 8 年前
        1
  •  1
  •   Fletcher    8 年前

    如果类库解决方案不能拥有可执行项目,我们仍然可以对其进行调试。 例如,我得到了一个类库,名为 类别库1 ,其中的类很简单: enter image description here

    我还创建了 控制台项目 独立,添加 参考->浏览->查找ClassLibrary1。动态链接库 . 添加using语句和代码,如下所示: enter image description here

    我设置了断点,运行了控制台项目,它可以进入其中。

        2
  •  1
  •   Thiago Loureiro    8 年前

    经过一些研究并感谢@Fletch Zhou的帮助,我最终创建了一个调试器助手。

    我所做的是,创建一个名为DebuggerHelper的新控制台应用程序,该应用程序运行我的“主应用程序”,我需要将其连接到进程,等待(睡眠),然后将正在运行的VisualStudio实例连接到该EXE。

    然后,我将新的exe添加到ClassLibrary项目的debug选项中,并将此exe文件添加为项目的一部分。 然后,当我按F5运行类库时,他加载了我的外部应用程序,并完美地连接了它:)

    enter image description here

    private static void AttachProcess()
    {
        var localByName = System.Diagnostics.Process.GetProcessesByName(_appName);
    
        MessageFilter.Register();
        var process = GetProcess(localByName[0].Id);
        if (process != null)
        {
            process.Attach();
            Console.WriteLine("Attached to {0}", process.Name);
        }
        MessageFilter.Revoke();
    }
    
    private static void StartProcess()
    {
        System.Diagnostics.Process.Start("start.bat");
    
        Console.WriteLine("Waiting to load the process...");
        System.Threading.Thread.Sleep(3000);
    }
    
    private static Process GetProcess(int processId)
    {
        // Visual Studio 2017 (15.0)
        var dte = (DTE)Marshal.GetActiveObject("VisualStudio.DTE.15.0");
        var processes = dte.Debugger.LocalProcesses.OfType<Process>();
        return processes.SingleOrDefault(x => x.ProcessID == processId);
    }
    

    Github解决方案: https://github.com/thiagoloureiro/DebuggerHelper