我如何获得DTE运行Visual Studio的实例? [英] How do I get the DTE for running Visual Studio instance?

查看:151
本文介绍了我如何获得DTE运行Visual Studio的实例?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何获得Visual Studio中的所有运行实例,这样我可以做到自动化

How do I get all the running instances of Visual Studio so that I can do automation?

(添加了这个问题,因为的this~~V~~aux 之一被关闭)

(added this question because this one was closed)

推荐答案

使用运行对象表中获得的所有实例,然后选择一个你想要的。

Use the running object table to get all instances, then select the one you want.

我不认为你可以做得比这更好。它类似于你一个调试器附加到VS实例的方式。你必须选择一个从列表

I don't think you can do better than this. It is similar to the way you attach a debugger to a VS instance. You have to select one from a list.

IEnumerable<DTE> GetInstances()
{
    IRunningObjectTable rot;
    IEnumMoniker enumMoniker;
    int retVal = GetRunningObjectTable(0, out rot);

    if (retVal == 0)
    {
        rot.EnumRunning(out enumMoniker);

        IntPtr fetched = IntPtr.Zero;
        IMoniker[] moniker = new IMoniker[1];
        while (enumMoniker.Next(1, moniker, fetched) == 0)
        {
            IBindCtx bindCtx;
            CreateBindCtx(0, out bindCtx);
            string displayName;
            moniker[0].GetDisplayName(bindCtx, null, out displayName);
            Console.WriteLine("Display Name: {0}", displayName);
            bool isVisualStudio = displayName.StartsWith("!VisualStudio");
            if (isVisualStudio)
            {
               object obj;
               rot.GetObject(moniker[0], out obj);
               var dte = obj as DTE;
               yield return dte;
            }
        }
    }
}

[DllImport("ole32.dll")]
private static extern void CreateBindCtx(int reserved, out IBindCtx ppbc);

[DllImport("ole32.dll")]
private static extern int GetRunningObjectTable(int reserved, out IRunningObjectTable prot);

这篇关于我如何获得DTE运行Visual Studio的实例?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆