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としてデプロイされると、起動しません。