我正在编写执行以下操作的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();