使用宏(Macro)扩展Visual Studio IDE

虽然有很多工具可以开发.NET程序,但我相信大多数的开发人员都是用Visual Studio(简称VS)。VS是微软所提供的一款集成开发工具,其最新版本为VS 2008。

VS使用起来还不错,不是吗?而且它还可以被我们进行扩展,按照我们自己的需求。这的确是挺诱人的,对吧?

认真说起来,扩展VS的IDE有很多方法,例如你可以通过创建一个所谓的"Visual Studio外接程序",这个外接程序其实就是一个实现了IDTExtensibility2接口的程序集。

t4

关于外接程序的具体细节,不是我们这次讨论的内容。你可以通过下面地址了解

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

这样我们的宏就做好了,你可以直接执行那两个方法。看,是不是很神奇呢。它打开了当前项目的文件夹。

t3

当然,我们还差最后一步没有完成。那就是把这两个方法关联到内置菜单里面去。

1)你需要通过以下路径打开自定义工具栏的对话框。"视图"=〉"工具栏"==〉"自定义"

2)在"自定义"对话框中,选中"上下文菜单",你会发现所有内置的快捷菜单都显示在顶部了

t7

3)把两个宏方法拖拽到相应的快捷菜单里面去

t6 

下面是配置好之后的效果:多出了两个菜单,分别都指向了上面写好的两个方法。单击这个菜单,就可以很方便地定位到项目或者解决方案的根目录,免去了复制,然后粘贴到运行窗口的劳动。

t1 t

 

 

附加资源:

Visual Studio自动化对象模型。如果确实有兴趣的朋友可以认真看一下(要想写出高质量的VS IDE扩展程序或插件,必须对该模型有较深入的认识)

Vs自动化模型图

如果你的机器上装好了MSDN,那么也可以通过下面的导航,了解到更加详细的信息

ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_extcore/html/4173a963-7ac7-4966-9bb7-e28a9d9f6792.htm

 

最后,你还可以下载VS Sdk进行更加深入的了解

http://download.microsoft.com/download/9/a/1/9a1b39c4-cf38-4e40-b0b8-aac1b34fc70a/VsSDKFebruary2007.exe

posted @ 2008-08-20 10:33  陈希章  阅读(2664)  评论(0编辑  收藏  举报