Я поделился своим решением для тех, кому оно понадобится в будущем.
Найдите нужный вам ProcessId.
using System.Management;
public int GetProcessId()
{
using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Process where Name = 'w3wp.exe'"))
{
foreach (ManagementObject process in searcher.Get())
{
if (process["CommandLine"].ToString().Contains("**YOUR-SEARCH-CRITERIA**"))
return Convert.ToInt32(process["ProcessId"].ToString());
}
}
throw new Exception("Not found.");
}
Чем прикрепить с идентификатором процесса.
var process = ((DTE2)Marshal.GetActiveObject("VisualStudio.DTE.15.0"))
.Debugger
.LocalProcesses
.Cast<EnvDTE.Process>()
.Where(proc => proc.ProcessID == GetProcessId())
.FirstOrDefault();
if(process != null)
process.Attach();