我试图以编程方式附加到IISExpress进程以进行调试。当使用Visual Studio附加到进程窗口时,我必须选择托管代码作为附加到的类型。如果选择自动检测,VS会尝试将IISExpress作为x86 /本机应用程序进行调试,该应用程序不起作用。Visual Studio以编程方式附加到托管进程
使用DTE的以下代码(来自此answer)会附加调试器,但似乎不会将其作为托管代码附加。
public static void AttachVisualStudioToProcess(Process visualStudioProcess, Process applicationProcess)
{
_DTE visualStudioInstance;
if (TryGetVsInstance(visualStudioProcess.Id, out visualStudioInstance))
{
//Find the process you want the VS instance to attach to...
DTEProcess processToAttachTo = visualStudioInstance.Debugger.LocalProcesses.Cast<DTEProcess>().FirstOrDefault(process => process.ProcessID == applicationProcess.Id);
//Attach to the process.
if (processToAttachTo != null)
{
processToAttachTo.Attach();
ShowWindow((int)visualStudioProcess.MainWindowHandle, 3);
SetForegroundWindow(visualStudioProcess.MainWindowHandle);
}
else
{
throw new InvalidOperationException("Visual Studio process cannot find specified application '" + applicationProcess.Id + "'");
}
}
}
也许DTE库不能提示调试器应该连接到托管代码?
汉斯,你是一个传奇。这完美的作品!我会在另一个答案中发布稍有修改的代码。 – Max
通过将字符串参数“native”直接传递给attach2方法,可以简化代码。如此处所述:http://msdn.microsoft.com/en-us/library/envdte80.process2.attach2.aspx。 – Herman