c# - Roslyn:WorkspaceChangeKind.DocumentRemoved 从未提出过
问题描述
我正在为 Visual Studio 开发 Roslyn 插件。我正在尝试订阅重命名文件后将引发的事件。我正在使用 Workspace.WorkspaceChanged,但它不会引发 DocumentRemoved。
- 重命名项目后不应该引发 WorkspaceChanged(使用 Kind=DocumentRemoved)吗?
- 有没有其他方法可以获取有关解决方案项目重命名的通知?我试图订阅 DTE 事件,但也没有运气。
这是我获得工作空间的方式:
var componentModel = (IComponentModel)serviceProvider.GetService(typeof(SComponentModel));
_myWorkspace = componentModel.GetService<VisualStudioWorkspace>();
解决方案
已经有几年了,我对此做了一些事情。我曾经写过一个在解决方案中搜索文件的 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 并将结果通过管道传递给您的插件逻辑可能是最简单的方法。
我希望我能帮到你,或者至少为你指明了正确的方向。
推荐阅读
- python - Numpy数组最高点选择
- c# - Microsoft Graph:每次启动进程时都避免授权
- vue.js - 如何在工作过程中将存储在localStorage中的购物篮数据与vue中的axios服务器上的数据同步?
- r - 如何在r中提取字符串
- java - 不使用 ImageIO.read() 从 JPG 转换为 PNG 图像
- php - HTML 代码正在电子邮件中发送,而不是渲染视图 Wordpress
- python - pydantic 中的验证
- ios - iAP 自动更新订阅恢复所有已完成的交易都回来了
- discord.js - DiscordJS V12 - reactCollector 'remove' 从不发射
- php - Elasticsearch搜索具有同一集群的不同字段的不同索引