Les événements DTE2 ne se déclenchent pas

En essayant de développer mon premier VS Addin, je rencontre des problèmes lors du déclenchement d’événements DTE2.

En gros, les événements DocumentOpened et LineChanged ne sont pas déclenchés pour une raison quelconque. Quelle partie importante me manquait?

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 [...] } } 

Vous devez enregistrer la classe DocumentEvents. Je pense qu’ils seront abandonnés ou ramassés.

Dans mon cas.

 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); } 

J’ai trouvé une solution différente à ce problème.

Je boxais et déballais mon object DTE avant de faire mes abonnements aux événements. Cette ultimement prouvé le coupable pour moi. Bien que ce ne soit pas votre problème, cela pourrait aider les personnes confrontées à des problèmes similaires; et il est bon de savoir pour que vous ne commettiez pas les mêmes erreurs que j’ai faites qui ont pris un temps extrême à résoudre.

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