首页 > 解决方案 > VS2019 的 DynamicMenu 扩展加载菜单太晚了

问题描述

我有一个使用动态菜单的 VS 扩展。因此它使用 vsct 在解决方案和项目上定义一些菜单项,然后动态加载子项。此扩展在 VS2017 和许多旧版本中运行良好。

现在我正在更新它以在 VS2019 中工作。我已经调整了目标版本,但遇到了 VS2019 不允许您同步加载包的问题,​​因此我将扩展类更改为使用 AsyncPackage 和 InitializeAsync。即使有了这些更改,当我为 VS2017 构建和运行这个项目时,一切似乎都正常。

但是在 VS2019 中,DynamicMenu 加载得太晚了。如果我运行 Visual Studio 2019 并打开一个解决方案,然后在解决方案资源管理器中右键单击解决方案或项目,在 vsct 中定义的菜单项是 thre,但尚未加载 DynamicMenuPackage,因此子菜单的尚未填充,我最终看到了占位符子菜单。

如果我只是等待 30-60 秒,它最终会加载。我可以从字面上看到我的 DynamicMenuPackage 的静态构造函数: AsyncPackage 最终会被击中。但这不好。我需要确保在用户打开菜单时填充菜单。

当它异步加载时我该怎么做?我已经尝试了所有可以找到的 ProvideAutoLoad 选项,包括:

VSConstants.UICONTEXT.DesignMode_string
VSConstants.UICONTEXT.SolutionExists_string
VSConstants.UICONTEXT.SolutionExistsAndFullyLoaded_string

但这些都没有产生可靠的结果。

有什么方法可以使用 AsyncPackage 并且仍然以某种方式强制它同步加载吗?当然,无需打开“不推荐”Visual Studio 选项来同步加载扩展。

任何想法都会受到欢迎。

标签: visual-studio-2019visual-studio-extensions

解决方案


无法同步加载 AsyncPackage。我们所能做的就是设置

[ProvideAutoLoad(VSConstants.UICONTEXT.NoSolution_string, PackageAutoLoadFlags.BackgroundLoad)]
[ProvideAutoLoad(VSConstants.UICONTEXT.SolutionExists_string, PackageAutoLoadFlags.BackgroundLoad)]

等待。


推荐阅读