我的Visual Studio包需要使用EnvDTE.DTE变量,但始终返回为空。在阅读了很多黑客知识之后,他们都说要使用OnShellPropertyChange()方法(IVsShellPropertyEvents),但有时它永远不会触发 - 就好像我的扩展从未完成加载。VSIX:获取DTE对象
我使用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 - 它。根本不火。
VSSPROPID4给了我一些不明确的问题,这就是为什么我现在用整数。我会改变这种状况,看看它现在是否奏效 - 谢谢! – 2010-09-25 19:19:21