c# - 创建一个简单的文本操作 Visual Studio 2010 扩展

标签 c# visual-studio-2010 mef vsx

一段时间以来,我一直想为 Visual Studio 创建一个简单的文本操作扩展,现在我终于抽出时间研究如何编写扩展。我的想法可以通过 VBA 宏来实现,但我宁愿将其实现为“真正的”扩展;作为一个学习过程,因为老实说我受不了 VBA。

经过大量谷歌搜索、博客阅读、深入 MSDN 和浏览 StackOverflow 帖子后,我认为我已经收集了足够的信息来实现它 - 但我想要一些关于我是否正在接近事情的反馈在我开始黑客攻击之前 :)

我想要的是:

  1. 注册用户可以通过工具->选项->键盘绑定(bind)热键的命令。
  2. 调用命令时修改事件窗口的文本缓冲区。
  3. 我不太关心菜单或工具栏,但知道如何通过 .vsct 文件添加它们(有更好的选择吗?)

对于 #1,似乎我必须做一个完整的 VSPackage、.vsct 文件等等 - 没有我可以处理的简单易用的 MEF 扩展点吗? (也许导出一个 IWpfTextViewCreationListener 并摆弄手动键盘快捷键处理 - 但那将是一个重大的 hack)。

对于 #2,我不确定如何为事件文档获取 ITextBuffer。我可以通过 DTE.ActiveDocument,但我不确定如何从中获取 ITextBuffer。或者,我可以按照...做一些事情

var txtMgr = (IVsTextManager)ServiceProvider.GetService(typeof(SVsTextManager));
IVsTextView textViewCurrent;
txtMgr.GetActiveView(true, null, out textView);
IWpfTextView wpfViewCurrent = AdaptersFactory.GetWpfTextView(textView);
ITextBuffer textCurrent = wpfViewCurrent.TextBuffer;

...但这确实看起来像是一种迂回的做事方式?

最佳答案

对于这两个,请查看 Align Assignments extension source .它是一个包/MEF 组件,添加一个命令并在事件窗口中处理它。

您对 #1 的回答是正确的。执行命令的最佳方式是使用 .vsct 文件,这需要一个包。但是,所有包都意味着您的项目将生成一个带有嵌入式资源(来自 .vsct 文件)和一个 .pkgdef 文件的 dll,该文件根据您在包中提供的属性添加注册表项。它(希望)不会有太多开销。

对于你的第二个问题,有一个更简洁的方法。看看 command filter ,它在事件 View 中监听命令,而不是全局监听它们然后找到事件 View 。它让 shell 处理命令路由,只专注于实现。

关于c# - 创建一个简单的文本操作 Visual Studio 2010 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4085158/

相关文章:

.net - 使用 MEF 按命名空间解析导入

c# - RestSharp ASYNC client.ExecuteAsync<T> () 工作示例

visual-studio-2010 - Visual Studio 2010 在哪里存储文件菜单的 “Recent Projects and Solutions” 项?

c++ - 调试版本运行但发布给出 0xc000007b - 缺少 dll?

asp.net - 在具有静态 IP 地址的服务器上远程调试 ASP.NET 应用程序

c# - 无法使我的 ViewModelLocator 工作

c# - MEF:使用和从组合零件导出来满足导出零件的要求

c# - 转换为具有接口(interface)的通用类

C# 编译器提示之前没有使用局部变量

c# - 访问 CultureInfo 设置(区域设置)?