gpt4 book ai didi

c# - 如何获取运行 Visual Studio 实例的 DTE?

转载 作者:可可西里 更新时间:2023-11-01 09:04:24 24 4
gpt4 key购买 nike

如何获取所有正在运行的 Visual Studio 实例以便我可以执行自动化?

(添加此问题是因为 this one 已关闭)

最佳答案

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

我认为没有比这更好的了。它类似于将调试器附加到 VS 实例的方式。您必须从列表中选择一个。

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

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

uint fetched = uint.MinValue;
IMoniker[] moniker = new IMoniker[1];
while (enumMoniker.Next(1, moniker, out 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);

要使其在 Visual Studio 2022 中运行,您将需要 envdte nuget 包: https://www.nuget.org/packages/envdte/17.2.32505.113

关于c# - 如何获取运行 Visual Studio 实例的 DTE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14205933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com