在我的dotnet core 2.0应用程序中,我在某个点上以不同的进程(具有一些不同的参数)重新启动相同的应用程序。我希望能够以编程方式将当前的Visual Studio(2017)调试器附加到新进程。
Here is an example of how it is done in full framework但对于初学者来说,Marshal.GetActiveObject
方法似乎不存在。
在dotnet core 2.0中有没有不同的方法来实现这一目标?或者这是不可能的?
答案 0 :(得分:0)
尽管这种情况正在发生变化,但是.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);