Этот вопрос касается моего вопроса, но не изменений, внесенных в Visual Studio 2019
, где VSIX
проекты загружаются асинхронно, тогда как в предыдущих версиях Visual Studio VSIX проекты загружались синхронно.
Я использую IVsSolutionEvents3
в своих проектах VSIX, чтобы получать уведомления о
VSTestPackage1: OnAfterOpenProject
VSTestPackage1: OnQueryCloseSolution
VSTestPackage1: OnQueryCloseProject
VSTestPackage1: OnQueryCloseProject
VSTestPackage1: OnBeforeCloseSolution
VSTestPackage1: OnQueryCloseProject
VSTestPackage1: OnBeforeCloseProject
VSTestPackage1: OnQueryCloseProject
VSTestPackage1: OnBeforeCloseProject
VSTestPackage1: OnAfterCloseSolution
Я изменил оформление для своего проекта VSIX, чтобы включить рекомендованный SolutionExistsAndFullyLoaded
, однако я не получаю никаких уведомлений для самое первое решение, которое открывает пользователь. В VS2019 это новое диалоговое окно, отображаемое до фактической среды IDE.
[ProvideAutoLoad(VSConstants.UICONTEXT.SolutionExistsAndFullyLoaded_string, PackageAutoLoadFlags.BackgroundLoad)]
[PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
[Guid(VSTestPackage1.PackageGuidString)]
[InstalledProductRegistration("#110", "#112", "2017.1.4.664", IconResourceID = 400)]
[SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1650:ElementDocumentationMustBeSpelledCorrectly", Justification = "pkgdef, VS and vsixmanifest are valid VS terms")]
[ProvideMenuResource("Menus.ctmenu", 1)]
public sealed class VSTestPackage1 :
AsyncPackage,
IVsSolutionEvents3,
IVsUpdateSolutionEvents,
IVsBuildStatusCallback,
IDisposable
{
}
Я получаю уведомления для всех решений после загрузки исходного решения и для закрытия исходного решения, но не загрузки первоначальное решение. Из отладки я вижу, что после загрузки исходного решения мои проекты VSIX инициализируются.
protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)
{
System.Diagnostics.Debug.WriteLine("VSTestPackage1: Entering Initialize()");
...
}
Вызов InitializeAsync()
не предоставляет IVsHierarchy pHierarchy
, что позволило бы мне извлечь уже открытое решение /project.
Как я могу получить уведомление о первоначальном решении / проекте?