Как бы я программно сказал Visual Studio загружать внешние модификации? - PullRequest
0 голосов
/ 23 марта 2020

Я пишу расширение Visual Studio 2019, которое выполняет следующее:

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

Как мне ждать, пока Visual Studio загрузит изменения в рабочую область?

У меня есть рассматривал возможность прослушивания событий VisualStudioWorkspace.WorkspaceChanged, но неясно, когда все изменения были интегрированы в рабочую область.

1 Ответ

0 голосов
/ 24 марта 2020

В последней версии 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();
...