visual-studio-2019 - 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 选项来同步加载扩展。
任何想法都会受到欢迎。
解决方案
无法同步加载 AsyncPackage。我们所能做的就是设置
[ProvideAutoLoad(VSConstants.UICONTEXT.NoSolution_string, PackageAutoLoadFlags.BackgroundLoad)]
[ProvideAutoLoad(VSConstants.UICONTEXT.SolutionExists_string, PackageAutoLoadFlags.BackgroundLoad)]
等待。
推荐阅读
- html - Angular Google 地图放置在 sweetalert2 弹出窗口中时不显示
- arrays - 没有空引用异常,无法获取空数组的长度
- python - 当我们在 python 中从列表转换为集合时会发生什么?
- python - Python:如何对未标记的图像进行分类并保存到类文件夹中?
- xcode - 我升级到“Xcode 11 Beta 3”,它只引入“Create ML”(版本 1),没有显示“活动”分类器模型?
- c++ - .erase() 和 .size() 在这段代码中做了什么?
- php - 使用 PHP 进行 MySQL 搜索
- fortran - 错误:Cygwin/gfortran 中的续行错误
- javascript - Webpack4 npm start Uncaught TypeError
- python - 如何遍历隐藏的 div 并抓取文本?