Gói Visual Studio của tôi yêu cầu sử dụng biến EnvDTE.DTE, nhưng nó luôn được trả về là rỗng. Sau khi đọc trên nhiều hacks, tất cả chúng đều sử dụng phương thức OnShellPropertyChange() (IVsShellPropertyEvents), nhưng đôi khi nó không bao giờ cháy - như thể phần mở rộng của tôi chưa bao giờ kết thúc tải.VSIX: Nhận đối tượng DTE
Tôi đang sử dụng VS2010 và kiểm tra chống lại cả VSSPROPID_Zombie và ShellInitialized - không hoạt động. ? :(
Bất kỳ ý tưởng Đây là mã Tôi đang sử dụng:
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;
}
EDIT: Theo thực nghiệm sơ thẩm, nó hoạt động một cách hoàn hảo và mất khoảng 5 giây để khởi Tuy nhiên, khi triển khai như VSIX - nó. chỉ đơn giản là không cháy.
VSSPROPID4 đã cho tôi một số vấn đề mơ hồ, đó là lý do tại sao tôi đã đi với số nguyên cho bây giờ. Tôi sẽ thay đổi điều kiện và xem nó có hoạt động không - cảm ơn! –