Visual Studio扩展 - 如何侦听解决方案\项目项目选择更改

时间:2018-01-04 16:55:41

标签: c# visual-studio visual-studio-extensions vsix

我创建一个Visual Studio扩展,我想在用户选择项更改或当前项目选择更改时收听。

我试着听 - SelectionEvents中的OnChange:

 var dte = ServiceProvider.GlobalProvider.GetService(typeof(EnvDTE.DTE)) as DTE2;
 var dteEvents = dte.Events as Events2;
 var selectionEvents = dteEvents.SelectionEvents;
 selectionEvents.OnChange += SelectionEventsOnOnChange;

但是OnChange事件并没有发生。

1 个答案:

答案 0 :(得分:0)

我发现了问题 简而言之:DTE事件是COM对象,当您在本地函数中处理此类对象的事件时,我们将GC删除参考。
解决方案:保存事件对象的私有成员。

private DTE2 _dte2;
private Events2 _dteEvents;
private SelectionEvents _selectionEvents;

private void OnLoaded()
{
    _dte2 = ServiceProvider.GlobalProvider.GetService(typeof(EnvDTE.DTE)) as DTE2;
    _dteEvents = _dte2.Events as Events2;
    _selectionEvents = _dteEvents.SelectionEvents;
    _selectionEvents.OnChange += SelectionEventsOnOnChange;
}