扩展Visual Studio的文档实际上是不存在的,我设法在撞到砖墙之前,从十几个或更多隐蔽的源周围组装了几行功能代码。
我需要做的就是订阅插入代码段后触发的事件。听起来很容易,或者我想。几乎立即进入我的研究,我偶然发现了以下几点:
IVsExpansionClient.OnAfterInsertion
这完全描述了我的意图,所以这必须是答案!在查看我的SDK程序集的时间超过了我想承认的时间之后,我终于最终从我的GAC中取消了程序集(Microsoft.VisualStudio.TextManager.Interop.8.0.dll),以便我可以在我的解决方案中明确引用它。
现在我可以访问界面,我只需要弄清楚如何获取它的实例。
啊哈哈!那必须以某种方式为我提供一个获取IVsExpansionClient实例的机制,对吧?好吧,不完全是。至少不是我能看到的方式。我已将以下代码拼接在一起:IVsExpansionManager
IVsExpansionManager expansionManager = null; IVsTextManager2 textManager = (IVsTextManager2)Package.GetGlobalService(typeof运算(SVsTextManager)); INT manager = textManager.GetExpansionManager(out expandManager);
这给了我一个IVsExpansionManager COM对象,但这是我能得到的。
我注意到了另一个潜在的提供者:
IVsExpansionEvents
我想也许就像解决方案事件,文档事件,窗口事件或文本事件一样,我或许可以调用DTE来挂钩这些事件,但它们似乎不存在。
有些方法接受IVsExpansionClient作为参数,例如:
IVsExpansion.InsertNamedExpansion
所以必须有一种方法来获取这个对象的实例,对吧?我想可以创建我自己的实现IVsExpansionClient接口的类,但我不知道从哪里开始实现接口成员,我仍然不知道如何在我的包中以有意义的方式实例化它。 / p>
我很感激任何能指出我不同方向的人,或者提供一个可以根据我的需求调整的工作样本。感谢您花时间阅读本文,感谢您的时间。
编辑:我想收到一条通知,说明已将代码段插入活动文档窗口。理想情况下,我希望片段本身包含在委托事件args中,因为我对插入的片段进行了一些处理......处理整个文档或尝试识别最近插入的片段会很麻烦没有上下文。
答案 0 :(得分:0)
也许您想解释一下您实际想要实现的目标。 MainActivity
接口的文档说明:
实施者须知 此接口由支持插入代码段的
IVsExpansionClient
实现。
我不明白为什么人们想要使用它的实例,因为它是一个接口,允许包接收通知/回调,如果与代码片段相关的事情将要发生(它提供nohting else)比回调函数。)
它还说明了......
来电者须知 此接口被实例化并传递到
VSPackage
接口中的InvokeInsertionUI
方法。此接口也被实例化并传递给IVsExpansionManager
接口中的方法。