【发布时间】:2013-07-20 15:19:35
【问题描述】:
我的问题
我正在尝试为 Visual Studio 构建一个扩展,以允许基于每个函数而不是每个文件来编辑代码。我基本上是在尝试以与Microsoft Debugger Canvas 类似的方式显示代码。
我想知道如何在单个窗口中托管多个 Visual Studio 编辑器(我相信这些窗口正在实现 IVsWindowFrame)。我所追求的功能如下所示:
每个编辑器窗口都保留了典型的功能,并按预期与第三方扩展进行交互。 (例如,VsVim 在这些窗口中正常运行)。
我的尝试
我花了将近两个星期的时间研究和尝试这些东西,但在弄清楚我将要使用哪些服务、接口和类时遇到了很多麻烦。
阅读MSDN
首先,documentation 的大部分内容都讨论了如何编辑单个编辑器窗口并添加装饰、标签、边距等。它没有讨论在一个窗口窗格中生成多个编辑器的可能性。
我浏览了有关我感兴趣的大量接口的文档,包括IVsTextBuffer、IVsTextView 和IVsInvisibleEditor。不幸的是,我无法让其中一些界面很好地配合使用。
除此之外,通常优秀的 MSDN 在这方面极为缺乏。许多接口只包含一个成员列表,甚至没有关于预期用途和功能的基本说明。 (例如IComponentModel)。
许多接口都引用了一组Editor Samples,但代码无法在MSDN上阅读或下载。显然它是随 Visual Studio 2005 提供的,但我没有这个版本的 Visual Studio,也找不到它。
与 IVsUIShell 交互
我可以使用IVsUIShell.GetDocumentWindowEnum(); 访问所有打开的 WindowFrames
我看到有一个IVsUiShell.CreateDocumentWindow() 方法,但我完全不熟悉它接受的参数,或者这是否是正确的路径。
我需要做什么
- 以编程方式创建可停靠窗口窗格
- 以编程方式将编辑器添加到此窗口窗格。 (并确保它们在 Visual Studio、正在运行的文档表等中正确注册)
编辑:
对不起,我应该扩大我的步数。当我说我需要注册正在运行的文档表和 Visual Studio 时,这是因为我想在我的自定义编辑器中实际编辑原始文档。下面是我尝试重新创建的 Debugger Canvas 中可用功能的简短示例:
http://i.imgur.com/aYm8A5E.gif(我无法嵌入 .gif)
或者:
如果有人知道我在哪里可以找到包含在 Visual Studio 2005 中的编辑器示例,例如 Basic Editor Sample,我相信我可以解决这些问题。 MSDN 文档中没有关于这些接口的代码示例,这让我的工作变得异常困难。
【问题讨论】:
-
您想要的示例随 Visual Studios SDK 一起提供。由于它们没有显示任何更新的版本,我希望最新版本具有相同的示例
-
没有 Visual Studio 2012 SDK 示例,但有 2010 示例。我已经浏览了所有这些,但没有一个是我提供的 VS 2005 链接中提到的。我相信 2010 年的示例旨在突出他们为该版本的 Visual Studio 添加的 WPF 接口。
-
嗨,乔希。我在寻找完全相同类型的扩展名时遇到了您的问题(在阅读干净代码之后)。您是否有幸找到 \ 构建 Debugger Canvas 的替代方案?附言刚刚意识到,您是 Shotgun 调试 Roslyn 教程背后的人 - 感谢他们 :-)
-
我用在这里学到的信息和我的一个朋友一起构建了codeconnect.io。但是,它是用于探索代码而不是调试代码。谢谢,很高兴你发现它们有帮助:)
标签: c# visual-studio editor mef visual-studio-extensions