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

sne*_*rch 6 c# vsx mef visual-studio-2010

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

经过大量的谷歌搜索,博客阅读,深入研究MSDN和浏览StackOverflow帖子后,我想我已经收集了足够的信息,我可以实现它 - 但我想在开始之前就是否正在接近事情的一些反馈劈开:)

我想要的是:

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

对于#1,似乎我必须完成一个完整的VSPackage,.vsct文件等等 - 我没有可以处理的简单易用的MEF扩展点吗?(也许是出口IWpfTextViewCreationListener和摆弄手动键盘快捷键处理 - 但这是一个主要的黑客攻击).

对于#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;
Run Code Online (Sandbox Code Playgroud)

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

Noa*_*rds 9

对于这两种情况,请查看" 对齐分配"扩展源.它是一个包/ MEF组件,它添加一个命令并在活动窗口中处理它.

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

对于你的第二个问题,有一种更清洁的方式.查看命令过滤器,该过滤器在活动视图中侦听命令,而不是全局监听它们,然后查找活动视图.它允许shell处理命令路由,并专注于实现.