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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Visual Studio将类库项目附加到外部应用程序相关的知识,希望对你有一定的参考价值。

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

我在这里找到了一些解决方案来解释我正在做的事情,但在我的情况下,它不能从vs运行,看起来我需要一些延迟到VS(AutoAttach)到可执行文件

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

enter image description here

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

我也这样做,但无论是否运行VisualStudio中的可执行文件,附加(调试)都无法正常工作。

enter image description here

答案

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

我还独立创建了一个控制台项目,添加引用 - >浏览 - >找到ClassLibrary1.dll。添加using语句和代码如下:enter image description here

我把断点,运行控制台项目,它可以进入它。

另一答案

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

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

然后我将新的exe添加到我的ClassLibrary项目的调试选项上,并添加了这个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

以上是关于使用Visual Studio将类库项目附加到外部应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 中复制 DLL 的依赖项

在 Visual Studio c++ 项目中将 Eigen 外部库放在哪里?

在 Visual Studio 2008 中使用附加到进程调试 DLL 项目

如何在 .NET Core 类库中引用 Visual Studio 共享项目

Visual Studio 2010 挂起附加到进程/调试

使用 Visual Studio 2012 将键盘快捷键附加到解决方案资源管理器中的“全部折叠”项目