我正在尝试以编程方式附加到 IISExpress 进程以进行调试。使用 Visual Studio 附加到进程窗口时,我必须选择托管代码作为要附加到的类型。如果选择了自动检测,VS 会尝试将 IISExpress 调试为不起作用的 x86/本机应用程序。
使用 DTE的以下代码(来自此答案)附加了调试器,但似乎没有将其作为托管代码附加。
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 库无法建议调试器应附加到托管代码?