我正在开发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] 删除。
我来说两句