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



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

我试着听 - 选择事件中的更改:

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

但是 OnChange 事件不会触发。

我发现了问题。
简而言之: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;
}

最新更新