DTE2事件不会触发

在尝试开发我的第一个VS Addin时,我遇到了解雇DTE2事件的问题。

基本上,DocumentOpened和LineChanged事件由于某种原因不会触发。 我错过了什么重要的部分?

namespace TestAddin { public class Connect : IDTExtensibility2 { private AddIn _addInInstance; private DTE2 _applicationObject; public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2) application; _addInInstance = (AddIn) addInInst; _applicationObject.Events.DocumentEvents.DocumentOpened += InitializeFoldingOnDocument; _applicationObject.Events.TextEditorEvents.LineChanged += UpdateFoldingOnDocument; } private void UpdateFoldingOnDocument(TextPoint startpoint, TextPoint endpoint, int hint) { RegionFolding(_applicationObject.ActiveDocument); } private void InitializeFoldingOnDocument(Document document) { RegionFolding(document); } private void RegionFolding(Document _document) { // Do the folding [...] } // Other IDTExtensibility2 Members [...] } } 

您需要保存DocumentEvents类。 我认为他们将被废弃或垃圾收集其他。

在我的情况下。

 private SolutionEvents solutionEvents; public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { Globals.DTE = (DTE2)application; Globals.Addin = (AddIn)addInInst; solutionEvents = Globals.DTE.Events.SolutionEvents; solutionEvents.Opened += new _dispSolutionEvents_OpenedEventHandler(SolutionEvents_Opened); solutionEvents.BeforeClosing += new _dispSolutionEvents_BeforeClosingEventHandler(SolutionEvents_BeforeClosing); } 

我找到了解决这个问题的不同方法。

在进行我的活动订阅之前,我正在装箱和拆箱我的DTE对象。 这绝对certificate了我的罪魁祸首。 虽然这不是你的问题,但它可以帮助其他有类似问题的人; 并且很高兴知道,所以你不会犯同样的错误,这需要花费大量的时间来解决。

请看: http : //social.msdn.microsoft.com/Forums/en-US/vsx/thread/eb1e8fd1-32ad-498c-98e9-25ee3da71004