繁体   English   中英

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

[英]Attach ClassLibrary Project to External Application with VisualStudio

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

我在这里找到了一些解决方案,确切解释了我正在做的事情,但是就我而言,从vs运行它无法正常工作,看来我需要对VS(AutoAttach)到可执行文件的延迟

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

在此处输入图片说明

但是,如果我手动运行此过程,并且(等待加载)并将我的库附加到该过程中,则它可以正常工作,但是我们需要自动执行此操作

我也在这样做,但是无论是否通过VisualStudio运行Executable,附件(调试)都无法正常工作。

在此处输入图片说明

如果类库解决方案不能包含可执行项目,我们仍然可以对其进行调试。 例如,我得到了一个名为ClassLibrary1的类库,其中的类很简单: 在此处输入图片说明

我还创建了一个独立的控制台项目 ,添加引用->浏览->查找ClassLibrary1.dll 添加using语句和代码,如下所示: 在此处输入图片说明

我放置了断点,运行控制台项目,它可能会介入其中。

经过一些研究并感谢@Fletch Zhou的帮助,我结束了创建Debugger Helper的工作。

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

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

在此处输入图片说明

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM