代码改变世界

给VS添加代码转换功能

2009-05-30 20:45 by Anders Cui, ... 阅读, ... 评论, 收藏, 编辑

话说在两三个月前,就想开发个代码转换器,将一个项目内的所有代码文件转换到另一种语言的版本,比如从C#到VB.NET,不过当时觉得很复杂——现在还是,囧。

前两天给个同事一段代码。他说,“是VB.NET的啊,还得改成C#的,好麻烦”,我想虽然有在线的代码转换页面,但总不会一直开着那个页面吧,所以想做个小功能:将一段代码转换为另一种语言的版本。

SharpDevelop,.NET平台的一个开源的IDE,提供了一个在线的代码转换器(.NET 2.0),更重要的是,它还公开了一个Web Service,这样我们就可以借助于它的力量。

最后,根据它提供的WinForm实例,很容易将代码转换功能集成到VS中:

code-convert-form

具体代码可以参看本文的下载代码。

这里通过这个功能的开发顺便提提两个值得注意的地方,一是Add-In运行过程中出现的异常;另一个是为Add-In命令添加快捷键。

Add-In运行过程中出现的异常

如果Add-In在运行时抛出了异常,VS表现得很淡定——它根本什么都不说。所以对于比较可能出现异常的地方,可以考虑添加try…catch代码块,这样易于跟踪和调试。

为Add-In命令添加快捷键

比较专业的Add-In往往会为它的命令添加快捷键(关于VS中的命令请参看这里)。先来看看在VS中如何为命令手工添加设置快捷键。通过菜单Tools->Options打开选项对话框,选择Environment->Keyboard:

set-command-shortcut2

要设置快捷键,首先要选择作用域,即上面Global所在的下拉列表,再就是快捷键本身,最下面的下拉列表说明你输入的快捷键当前是否已被用于某个命令。明白了这个设置过程,以编程方式来实现就容易了。

C# Code - 设置命令的快捷键
Command codeConverterCmd = _applicationObject.Commands.Item(GetCommandFullName(CODE_CONVERTER_COMMAND_NAME), 0);
codeConverterCmd.Bindings 
= "Global::Ctrl+T, C";

显示获取到命令对象的实例,然后设置Bindings属性,包括scope和shortcut两部分,就这么简单。

可以从这里下载代码,也可以在这里下载可运行的Add-In(解压缩后将文件放在[My Documents Path]\Visual Studio 2008\Addins下)。

参考

《Professional Visual Studio® 2008 Extensibility》
SharpDevelop Code Converter
Command.Bindings Property