【问题标题】:Monitor classes added/removed in Visual Studio extension在 Visual Studio 扩展中添加/删除的监视器类
【发布时间】:2021-12-11 12:56:21
【问题描述】:

我想为 Visual Studio 2019 编写一个与内置类视图有些相似的扩展。所以我想要一个显示当前解决方案下存在的类列表(树)的工具窗口。

我能想到两件事:

  1. 我需要扫描项目并查找课程
  2. 每次编辑源文件时,我都需要立即了解这一点,以添加新编写的类或删除现有的类。

请指出搜索的方向。我想我应该使用 .NET Compiler Platform SDK,但不知道如何使用。似乎没有事件接口。

【问题讨论】:

  • 这个thread 给你一些参考吗?另外,这个答案:hashs,MD5 可能会有所帮助。
  • 不完全。该线程是关于扫描解决方案中的每个项目和文件,我可以将其用于初始构建列表。但是,当用户稍微编辑代码时,重复所有这些步骤将是荒谬的。
  • 是否有像“ClassAdded”事件这样的高级 Roslyn API?或者我应该手动查看项目文件并在更改时重新扫描它们?

标签: roslyn visual-studio-extensions vsix


【解决方案1】:

尝试订阅 RunningDocTableEvents。这处理所有打开的文件(唯一应该更改的文件)。您可以监听一个 BeforeSave 和一个 AfterSave 事件,然后重新扫描相应的文件。

 var runningDocumentTable = (IVsRunningDocumentTable)GetService(typeof(SVsRunningDocumentTable));

 runningDocumentTable.AdviseRunningDocTableEvents(_viewModel, out _viewCookie);

您的 _viewModel 必须实现 IVsRunningDocTableEvents3 接口(任何不需要的事件都应该只返回 S_OK。 例如:

  #region IVsRunningDocTableEvents3 Members

  public int OnAfterAttributeChange(uint docCookie, uint grfAttribs)
    {
        return VSConstants.S_OK;
    }

  ...  

    public int OnAfterSave(uint docCookie)
    {
        // do something here
        return VSConstants.S_OK;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2013-10-07
    相关资源
    最近更新 更多