Visual Studio 扩展 - 如何监听 Solution \ Project item selection change

Visual Studio Extension - How to listen on Solution \ Project item selection change

我正在创建一个 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 事件没有触发。

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