c# - 我将如何以编程方式告诉 Visual Studio 加载外部修改?
问题描述
我正在编写一个执行以下操作的 Visual Studio 2019 扩展:
CheckoutGitBranch("some-branch");
WaitUntilChangesAreLoadedIntoWorkspace(); // <-- How to implement?
AnalyzeCodeInWorkspace();
如何等到 Visual Studio 将更改加载到工作区?
我一直在考虑监听VisualStudioWorkspace.WorkspaceChanged
事件,但目前还不清楚所有更改何时都已集成到工作区中。
解决方案
在最新版本的 VS(撰写本文时为 16.5)中有一个新的 API,您可以通过 MEF 导入称为IVsOperationProgressStatusService,然后您可以询问当前操作的状态。虽然Intellisense阶段并不明显表示完整的工作区更新(项目系统已处理所有文件更新并将它们发送到工作区)。
CheckoutGitBranch("some-branch");
// Don't know how your extension is acquiring VS services, you can do this however you want.
// Including using MEF, grabbing it during package initialization etc.
// Whichever method grabs this service does need to be on the UI thread though.
var operationProgress= await _serviceProvider.GetServiceAsync<SVsOperationProgress, IVsOperationProgressStatusService>(throwOnFailure: true);
IVsOperationProgressStageStatus intellisenseStatus = operationProgress.GetStageStatus(CommonOperationProgressStageIds.Intellisense);
await intellisenseStatus.WaitForCompletionAsync();
AnalyzeCodeInWorkspace();
推荐阅读
- sql - SQL - 如何从表中的 XML 字段中提取多个属性
- powerbi-embedded - PowerBI Embed Service Principal 为有效 ID 嵌入令牌生成错误
- asp.net-core - asp.net core IConfiguration 的内存占用
- c++ - 使用 chrono 库获取系统时间不准确
- angular - 离子如何等待服务完成
- wordpress - 从子目录中的任何路径重定向到不同的网站
- javascript - 如何使用图表 Js 查找每年的项目总和
- python - 字符串之间的空间
- python - Python烧瓶无法在中间件中获取标头值
- process - PC寄存器可以指向与文本段不同的内存区域吗?