当我这样做时:
// Get an instance of the currently running Visual Studio IDE.
EnvDTE80.DTE2 dte2;
dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
GetActiveObject("VisualStudio.DTE.10.0");
var solution = dte2.Solution; // get solution
Console.WriteLine(solution.FullName); // prints the name of the solution where this code is written
我能够获得当前ide的实例
我想获得对不同visual studio实例的dte2的引用。 This link表示可以这样做。结果我尝试了类似的东西:
Process p = new Process();
ProcessStartInfo ps = new ProcessStartInfo(@"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe");
p.StartInfo = ps;
p.Start(); // start a new instance of visual studio
var ROT = "!VisualStudio.DTE.10.0:" + p.Id;
// Get an instance of the NEW instance of Visual Studio IDE.
EnvDTE80.DTE2 dte2;
dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
GetActiveObject(ROT);
如果我尝试我得到例外:
无效的类字符串(来自HRESULT的异常:0x800401F3(CO_E_CLASSSTRING))
有更多链接显示我如何做我正在寻找的东西,但由于某种原因我不能使它工作。以下是一些链接:
答案 0 :(得分:3)
一直对我有用的一件事是
var dte = GetDTE();
var debugger = dte.Debugger;
var processes = debugger.LocalProcesses;
int processIdToAttach; //your process id of second visual studio
foreach (var p in processes)
{
EnvDTE90.Process3 process3 = (EnvDTE90.Process3)p;
if (process3.ProcessID == processIdToAttach)
{
if (!process3.IsBeingDebugged)
{
if (doMixedModeDebugging)
{
string[] arr = new string[] { "Managed", "Native" };
process3.Attach2(arr);
}
else
{
process3.Attach();
}
}
break;
}
}