我的Visual Studio程序包要求使用EnvDTE.DTE变量,但它始终以null返回。在阅读了许多技巧之后,所有人都说要使用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,它就不会触发。
最佳答案
我在这里看到了几个问题: