我试图挂钩几个Visual Studio事件。不幸的是我在第一步失败了。事件处理程序永远不会被调用。Visual Studio 2010扩展 - 未调用的事件
所以我的问题是我做错了什么?
这里是我的代码的一小段摘录。
// here are some attributes
[ProvideAutoLoad(VSConstants.UICONTEXT.SolutionExists_string)]
public sealed class VSPackage : Package {
EnvDTE80.DTE2 dte_;
EnvDTE.DocumentEvents documentEvents_;
EnvDTE.WindowEvents windowEvents_;
public VSPackage2Package() {
Trace.WriteLine("I am get called.");
}
protected override void Initialize() {
Trace.WriteLine("I am get called too.");
dte_ = (EnvDTE80.DTE2) System.Runtime.InteropServices.Marshal.
GetActiveObject("VisualStudio.DTE.10.0");
windowEvents_ = dte_.Events.WindowEvents;
documentEvents_ = dte_.Events.DocumentEvents;
windowEvents_.WindowCreated +=
new EnvDTE._dispWindowEvents_WindowCreatedEventHandler(
windowEvents_WindowCreated);
documentEvents_.DocumentOpened +=
new EnvDTE._dispDocumentEvents_DocumentOpenedEventHandler(
documentEvents__DocumentOpened);
Trace.WriteLine("Everything fine until here.");
}
void documentEvents__DocumentOpened(EnvDTE.Document document) {
Trace.WriteLine("Never called");
}
void windowEvents_WindowCreated(EnvDTE.Window window) {
Trace.WriteLine("Never called");
}
}
编辑:
我得到它的工作,寻找其他的示例代码,我想通了,他们有时会获得DTE对象不同。更改
dte_ = (EnvDTE80.DTE2) System.Runtime.InteropServices.Marshal.
GetActiveObject("VisualStudio.DTE.10.0");
到
dte_ = GetService(typeof(EnvDTE.DTE)) as EnvDTE80.DTE2;
,现在一切都很好。
没有帮助,OnShellPropertyChange叫,但从来没有与那里提到,移动我的事件注册反正有没有物业成功地执行,而且事件不叫 – ConfusedSushi 2011-01-27 13:55:11