首页 > 解决方案 > Roslyn:WorkspaceChangeKind.DocumentRemoved 从未提出过

问题描述

我正在为 Visual Studio 开发 Roslyn 插件。我正在尝试订阅重命名文件后将引发的事件。我正在使用 Workspace.WorkspaceChanged,但它不会引发 DocumentRemoved。

  1. 重命名项目后不应该引发 WorkspaceChanged(使用 Kind=DocumentRemoved)吗?
  2. 有没有其他方法可以获取有关解决方案项目重命名的通知?我试图订阅 DTE 事件,但也没有运气。

这是我获得工作空间的方式:

var componentModel = (IComponentModel)serviceProvider.GetService(typeof(SComponentModel));

_myWorkspace = componentModel.GetService<VisualStudioWorkspace>();

标签: c#roslynvisual-studio-extensionsvsixroslyn-code-analysis

解决方案


已经有几年了,我对此做了一些事情。我曾经写过一个在解决方案中搜索文件的 VS 插件。如果我记得,它也适用于重命名(不幸的是我无法检查,因为它适用于 VS 2015)。我用 DTE 事件做的比。我创建了一个 DteEventHandler 并添加到 DocumentEvents.DocumentSaved 我的函数中。

dte = Package.GetGlobalService(typeof(DTE)) as DTE2;
events = dte.Events;
docEv = events.DocumentEvents;
docEv.DocumentSaved += ScanDocumentForFunction;

另一种方法可能是通过解决方案文件。解决方案文件包含所有 csproj 文件,您可以从那里获取所有文件。

dte = FillIndexListCommandPackage.GetGlobalService(typeof(DTE)) as DTE2;
var solutionnamearr = dte.Solution.FullName.Split('\\');
...

如果您使用 git,那么在命令窗口中调用 git status 并将结果通过管道传递给您的插件逻辑可能是最简单的方法。

我希望我能帮到你,或者至少为你指明了正确的方向。


推荐阅读