我的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