在Visual Studio 2015中捕获解决方案事件

喜欢

我正在开发Visual Studio插件。我想记录一下打开新解决方案的事件。为了实现这一点,我实现了IVsSolutionEvents接口,并使用进行了注册AdviseSolutionEvents()但是,当我运行VS的测试实例并打开解决方案时,没有调用正确的事件方法。

这是我的代码:

public sealed class MyPackage : Package, IVsSolutionEvents
{
        // ...

        protected override void Initialize()
        {
            base.Initialize();

            IVsSolution solution = GetService(typeof(SVsSolution)) as IVsSolution;
            uint cookie = 0;
            solution.AdviseSolutionEvents(this, out cookie);
        }

        // ...  

        public int OnAfterOpenSolution(object pUnkReserved, int fNewSolution)
        {
            MessageBox.Show("Opened a solution!");
            return VSConstants.S_OK;
        }
}

为什么OnAfterOpenSolution()从不叫?

喜欢

好,我知道了。

事实证明,默认情况下,Visual Studio软件包在启动时不会加载,以避免消耗内存和CPU。而是,Visual Studio在需要时加载它们。因此,事件之前未注册。

要更改此行为,必须ProvideAutoLoad在类定义中添加属性:

[ProvideAutoLoad(VSConstants.UICONTEXT.NoSolution_string)]
public sealed class Command1Package : Package 
...

该属性的值是一个带有Guid的字符串,用于标识UI上下文,例如未打开任何解决方案的上下文。

来源

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Visual Studio 2015 IntelliSense 错误但解决方案编译

在Visual Studio 2015中打开解决方案时文件路径错误

Visual Studio 2015在解决方案中的哪里显示错误指示符?

Visual Studio 2015 - 将解决方案复制到新解决方案

Visual Studio 2017向后兼容Visual Studio 2015解决方案吗?

将Visual Studio 2013解决方案升级到Visual Studio 2015

Visual Studio 2015解决方案与Visual Studio 2013向后兼容

从Visual Studio解决方案中删除项目

在Visual Studio中查看多个项目/解决方案

在Visual Studio解决方案中仅构建特定项目

C ++中的Visual Studio解决方案配置值

在CMake中包含Visual Studio解决方案

解决方案无法在Visual Studio中运行/生成/重建

Visual Studio 解决方案文件中的环境变量

Visual Studio解决方案中的Markdown文档

Visual Studio 2017解决方案中的引用丢失

在Visual Studio Code中创建UWP解决方案

在解决方案中递归查找引用(Visual Studio)

如何为Visual Studio中的解决方案动态创建解决方案文件夹?

Visual Studio构建解决方案

CMake Visual Studio 解决方案设置

Visual Studio解决方案参考

无法打开Visual Studio解决方案

在Visual Studio 2015解决方案资源管理器中未显示bower.json

在Visual Studio 2015中更改解决方案资源管理器工具窗口的标题

Visual Studio 2015 中的构建解决方案给出错误“生成 Win32 资源时出错:访问被拒绝”

解决方案资源管理器不更新Visual Studio 2015中的团队项目

在Visual Studio 2015中打开解决方案时,“获得一切”的选项在哪里?

在不升级的情况下在Visual Studio 2013中打开Visual Studio 2008解决方案