gpt4 book ai didi

c# - VSIX:获取 DTE 对象

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

我的 Visual Studio 程序包需要使用 EnvDTE.DTE 变量,但返回时始终为空。在阅读了许多 hack 之后,他们都说使用 OnShellPropertyChange() 方法 (IVsShellPropertyEvents),但有时它永远不会触发 - 就好像我的扩展永远不会完成加载一样。

我正在使用 VS2010 并检查 VSSPROPID_Zombie 和 ShellInitialized - 没有工作。 :(

有什么想法吗?这是我正在使用的代码:

public int OnShellPropertyChange(int propid, object var) {
if (propid == -9053 || (int) __VSSPROPID.VSSPROPID_Zombie == propid) { // -9053 = ShellInit
try {
if ((bool) var == false) {
Dte = GetService(typeof (SDTE)) as DTE;
Flow.Dte = Dte;

var shellService = GetService(typeof (SVsShell)) as IVsShell;

if (shellService != null)
ErrorHandler.ThrowOnFailure(shellService.UnadviseShellPropertyChanges(_cookie));

_cookie = 0;
}
} catch {

}
}

return VSConstants.S_OK;
}

编辑:在实验实例下,它运行良好,初始化大约需要 5 秒。但是,一旦部署为 VSIX - 它就不会触发。

最佳答案

尝试以下命令:

dte = Package.GetGlobalService(typeof(DTE)) as DTE2;

关于c# - VSIX:获取 DTE 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3792333/

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