gpt4 book ai didi

.net - 不编码插件时获取当前的 EnvDTE 或 IServiceProvider

转载 作者:行者123 更新时间:2023-12-04 02:08:04 25 4
gpt4 key购买 nike

我正在编写一些设计时代码。我想使用这个片段:(找到 here)

var dte = (EnvDTE.DTE) GetService(typeof(EnvDTE.DTE));
if (dte != null)
{
var solution = dte.Solution;
if (solution != null)
{
string baseDir = Path.GetDirectoryName(solution.FullName);
}
}

问题是这不能编译。 (GetService 不是已知的方法调用)我尝试添加 Microsoft.VisualStudio.Shell(和 Microsoft.VisualStudio.Shell.10.0),但没有帮助。

在互联网上环顾四周,我发现您需要一个 IServiceProvider 来调用它。

但是所有展示如何获取 IServiceProvider 的示例都使用了 EnvDTE。

因此,要获得当前的 EnvDTE,我需要 IServiceProvider。但是要获得 IServiceProvider,我需要一个 EnvDTE。 (我的桶有一个洞...)

所以,这是我的问题:

在普通的 WPF 应用程序中,如何获取 EnvDTE 的当前实例?

注意:我不是在寻找任何旧的 EnvDTE 实例。我需要一个用于我当前的 Visual Studio 实例(我一次运行 3-4 个 Visual Studio 实例。)

最佳答案

这个问题有你正在寻找的答案。

Get the reference of the DTE2 object in Visual C# 2010

具体来说

https://stackoverflow.com/a/4724924/858142

这是代码:

用途:

using System;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using EnvDTE;
using Process = System.Diagnostics.Process;

方法:
[DllImport("ole32.dll")]
private static extern void CreateBindCtx(int reserved, out IBindCtx ppbc);
[DllImport("ole32.dll")]
private static extern void GetRunningObjectTable(int reserved,
out IRunningObjectTable prot);
internal static DTE GetCurrent()
{
//rot entry for visual studio running under current process.
string rotEntry = String.Format("!VisualStudio.DTE.10.0:{0}",
Process.GetCurrentProcess().Id);
IRunningObjectTable rot;
GetRunningObjectTable(0, out rot);
IEnumMoniker enumMoniker;
rot.EnumRunning(out enumMoniker);
enumMoniker.Reset();
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);
if (displayName == rotEntry)
{
object comObject;
rot.GetObject(moniker[0], out comObject);
return (DTE)comObject;
}
}
return null;
}

正如另一个答案所示,这在调试时不起作用。

关于.net - 不编码插件时获取当前的 EnvDTE 或 IServiceProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10864595/

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