我将如何以编程方式告诉Visual Studio加载外部修改?

问题描述 投票:0回答:1

我正在编写执行以下操作的Visual Studio 2019扩展:

CheckoutGitBranch("some-branch");
WaitUntilChangesAreLoadedIntoWorkspace(); // <-- How to implement?
AnalyzeCodeInWorkspace();

如何等待Visual Studio将更改加载到工作区中?

我一直在考虑侦听VisualStudioWorkspace.WorkspaceChanged事件,但尚不清楚何时将所有更改都集成到工作空间中。

c# visual-studio roslyn visual-studio-extensions vsix
1个回答
0
投票

在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();
© www.soinside.com 2019 - 2024. All rights reserved.