dotnet core 2.0 - 以编程方式将 VS2017 调试器附加到进程

Tom*_*Tom 5 c# .net-core asp.net-core-2.0 .net-standard

在我的 dotnet core 2.0 应用程序中,我在某个时间点在不同的进程中(使用一些不同的参数)重新启动相同的应用程序。我希望能够以编程方式将当前的 Visual Studio (2017) 调试器附加到新进程。

这是一个如何在完整框架中完成的示例,但对于初学者来说,该Marshal.GetActiveObject方法似乎不存在。

在 dotnet core 2.0 中是否有不同的方法来实现这一点?或者只是不可能?

And*_*lon 5

虽然这种情况正在发生变化,但 .Net Core 被设想为尽可能跨平台,并且最初遗漏了许多“仅限 Windows”的方法。也就是说,您仍然可以使用 P/Invoke 调用底层 Windows 函数:

[DllImport("oleaut32.dll", PreserveSig = false)]
static extern void GetActiveObject(ref Guid rclsid, IntPtr pvReserved,
    [MarshalAs(UnmanagedType.IUnknown)] out object ppunk);

[DllImport("ole32.dll")]
static extern int CLSIDFromProgID(
    [MarshalAs(UnmanagedType.LPWStr)] string lpszProgID, out Guid pclsid);
....

// Replace XX with the correct version
CLSIDFromProgID($"VisualStudio.DTE.XX.0", out var classId); 
GetActiveObject(ref classId, default, out dte);
Run Code Online (Sandbox Code Playgroud)