使用宏(Macro)扩展Visual Studio IDE
虽然有很多工具可以开发.NET程序,但我相信大多数的开发人员都是用Visual Studio(简称VS)。VS是微软所提供的一款集成开发工具,其最新版本为VS 2008。
VS使用起来还不错,不是吗?而且它还可以被我们进行扩展,按照我们自己的需求。这的确是挺诱人的,对吧?
认真说起来,扩展VS的IDE有很多方法,例如你可以通过创建一个所谓的"Visual Studio外接程序",这个外接程序其实就是一个实现了IDTExtensibility2接口的程序集。
关于外接程序的具体细节,不是我们这次讨论的内容。你可以通过下面地址了解
http://msdn2.microsoft.com/zh-cn/library/ms165620(VS.80).aspx
外接程序的好处是可以比较集中地封装大量复杂的扩展,同时也易于分发。但相对来说,所需要的能力也较高。相对比而言,另外一个扩展方法——宏扩展——则比较适合轻量级的扩展。它的实现方式相对较为容易。我们下面就以一个例子来说明如何创建宏,如何运行宏,实现某些有意思的事情。
我们今天要解决的问题是这样的:
大家知道,每个解决方案或项目都有一个相对应的文件目录。我们经常需要定位到这些目录。以前的做法是(以项目为例):
1)先选中该项目
2)在它属性中,复制它的"项目文件夹"这个属性值
3)打开"开始"=>"运行"命令,粘贴那个路径,然后回车
这些操作没有什么技术含量,地球人都知道怎么做。但经常这么做,显然不符合和谐社会的要求。试想,如果能在解决方案或者项目的快捷菜单中,就有一个命令,可以一次性做这样的事情,那该多好啊
很多事情并不难,尤其是当我们以认真的态度正视它的时候。为了实现上述要求,我们只需要写一个简单的宏。的确如此简单!
1)通过ALT+F8 打开宏资源管理器
2)在宏资源管理器中,定位到MyMacros,右键中选择"新建模块",给新的模块命名为ProjectContextMenu或者其他你喜欢的名字。
3)双击刚才新建的模块,把以下的代码复制到接下来打开的一个设计器中,并保存。
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics
Imports System.IO
'这个模块主要是用来为项目添加一些特殊的上下文菜单操作
Public Module ProjectContextMenu
'这个方法是定位到当前项目的目录
Public Sub NavigateToProjectPath()
Dim proj As EnvDTE.Project
proj = DTE.ActiveSolutionProjects(0) '定位到当前的项目
Dim path As String
path = System.IO.Path.GetDirectoryName(proj.FullName) '取得当前项目所在的目录
Dim process As New System.Diagnostics.Process
process.Start("Explorer.exe", path) '打开资源管理器
End Sub
'这个方法是定位到解决方案的目录
Public Sub NavigateToSolutionPath()
Dim sln As EnvDTE.Solution
sln = DTE.Solution '取得当前解决方案
Dim path As String
path = System.IO.Path.GetDirectoryName(sln.FullName) '取得当前解决方案的目录
Dim process As New System.Diagnostics.Process
process.Start("Explorer.exe", path) '打开资源管理器
End Sub
End Module
这样我们的宏就做好了,你可以直接执行那两个方法。看,是不是很神奇呢。它打开了当前项目的文件夹。
当然,我们还差最后一步没有完成。那就是把这两个方法关联到内置菜单里面去。
1)你需要通过以下路径打开自定义工具栏的对话框。"视图"=〉"工具栏"==〉"自定义"
2)在"自定义"对话框中,选中"上下文菜单",你会发现所有内置的快捷菜单都显示在顶部了
3)把两个宏方法拖拽到相应的快捷菜单里面去
下面是配置好之后的效果:多出了两个菜单,分别都指向了上面写好的两个方法。单击这个菜单,就可以很方便地定位到项目或者解决方案的根目录,免去了复制,然后粘贴到运行窗口的劳动。
附加资源:
Visual Studio自动化对象模型。如果确实有兴趣的朋友可以认真看一下(要想写出高质量的VS IDE扩展程序或插件,必须对该模型有较深入的认识)
如果你的机器上装好了MSDN,那么也可以通过下面的导航,了解到更加详细的信息
最后,你还可以下载VS Sdk进行更加深入的了解