天天看點

Visual Studio 2008 可擴充性開發(二):Macro和Add-In初探

<b>前言</b>

<b>VS 2008擴充方式一覽</b> 

Macro

Add-In

VsPackage

VS Shell

Domain Specific Language Tool

Visualizer

Code Snippet

Project/Item Template

MSBuild

在本文中将簡單介紹一下Macro和Add-In的用法,它們可以通路共同的API,既然這樣,了解一下Macro對Add-In的開發也會有幫助,然後就正式步入Add-In的開發。之後對于其它的擴充方式也會盡量多介紹一點。

<b>開發第一個Macro</b>

作為程式員,我們在編寫代碼的時候害怕重複,它的危害人人知曉。另一方面,對于某些操作,如果經常重複進行也會讓人厭煩,Macro此時也許能幫得上忙。

Macro一般翻譯為<b>宏</b>,它的一個含義是“<b>大量使用的</b>”,這個詞對于我們Windows平台下的開發人員來說應當不陌生,在Word和Excel中都有它的身影。宏的作用是将我們在VS中的一些重複操作錄制下來,之後可以多次運作,也就可以節省很多時間,心情也會是以變得好一點。

在VS中,宏可以用兩種方式來建立,一是錄制,二是手工編寫代碼。可以想見的是,第一種方式更為簡單,第二種方式則更為靈活、強大。需要注意的是,<b>目前隻能用VB.NET來開發宏</b>。

以前我曾用VBA開發過簡單的Excel自動化,當時如果某些操作不知如何用代碼表示,就錄制一個宏,看看它生成的代碼。VS中的宏與此類似,這也是為什麼我說對Add-In開發也有幫助了。我們可以将前面說的兩種方式結合起來使用,看看下面的例子。

<b>1)Macro Explorer</b>

通過菜單Tools -&gt; Macros -&gt; Macro Explorer(快捷鍵Alt+F8)打開Macro Explorer:

Visual Studio 2008 可擴充性開發(二):Macro和Add-In初探

它的結構看起來有點像Solution Explorer。在Macros上點選右鍵,選擇New Macro Project...,我這裡把宏命名為FirstMacro,将其設定為錄制項目:

Visual Studio 2008 可擴充性開發(二):Macro和Add-In初探

<b>2)錄制宏</b>

現在可以進行錄制了,按下<b>Ctrl+Shift+R</b>,這時會出現一個小工具欄,可以暫停、停止或取消一次錄制(如果某些操作不想錄制,就可以将它暫停)。然後執行以下操作:

按下Ctrl+F打開Find and Replace對話框

輸入":a+"(含引号),查找範圍為Current Document,然後選擇使用正規表達式

點選Find Next

按下Ctrl+Shift+R停止錄制

<b>3)運作宏</b>

這個簡單的宏可以用來查找目前文檔内寫死的字元串。按下Alt+F8打開Macro Explorer,可以看到新錄制的宏TemporaryMacro:

Visual Studio 2008 可擴充性開發(二):Macro和Add-In初探

通過右鍵菜單運作它,怎麼樣,是不是很友善涅?現在打開另一個檔案,再次運作宏。奇怪的是,還是在剛才的那個檔案内查找!看來剛才在錄制的時候把檔案名也錄制進去了,這時我們利用第二種方式:手工編寫代碼。

<b>4)修改宏</b>

參考上圖,在TemporaryMacro上點選右鍵,對它進行編輯。在新打開的Macro IDE内可以看到如下代碼:

Visual Studio 2008 可擴充性開發(二):Macro和Add-In初探
Visual Studio 2008 可擴充性開發(二):Macro和Add-In初探

VB.NET Code

    Sub TemporaryMacro()

        DTE.ExecuteCommand("Edit.Find")

        DTE.Windows.Item("ListViewSample.cs").Activate()

        DTE.Find.FindWhat = """:a+"""

        DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocument

        DTE.Find.MatchCase = False

        DTE.Find.MatchWholeWord = False

        DTE.Find.Backwards = False

        DTE.Find.MatchInHiddenText = True

        DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxRegExpr

        DTE.Find.Action = vsFindAction.vsFindActionFind

        If (DTE.Find.Execute() = vsFindResult.vsFindResultNotFound) Then

            Throw New System.Exception("vsFindResultNotFound")

        End If

    End Sub

Visual Studio 2008 可擴充性開發(二):Macro和Add-In初探

果然,這裡包含了剛才打開的檔案名,把這一行注釋掉。另外最後的異常資訊也不喜歡,改成"Sorry, I cannot find it:("。

Visual Studio 2008 可擴充性開發(二):Macro和Add-In初探

這樣使用起來就沒問題了。

通過這個小例子我們應當對Macro的用法有基本的了解了。不僅可以編寫有用的宏,還可以通過宏來幫助編寫Add-In,比如通過上面的代碼,我們就可以知道如何打開查找和替換對話框了。下面再來編寫我們的第一個Add-In。

<b>開發第一個Add-In</b>

Add-In可與宏通路相同的API,但是VS處理起來有所不同。<b>宏是可被VS運作的源代碼,但沒有內建到IDE中</b>,它不被編譯為程式集,要分發宏隻能使用源代碼。而Add-In呢,會被編譯為dll,然後VS啟動時加載它,這樣它就與IDE內建在了一起,部署的時候不需要源代碼。另一個差別是,目前隻能用VB.NET開發宏,而對于Add-In來說,任何.NET下的語言都可以使用,如C#、VB.NET和VC(理論上來說F#當然也可以,但還沒做過嘗試)。

Add-In可以操作解決方案、項目、檔案、編輯器,也可以操作VS中的各個工具視窗。可以說,它是擴充VS的一種比較專業的方式。下面來看看如何開發我們的第一個Add-In,它的功能是向編輯器内插入目前的日期,不管怎樣,還是有一點點用處。

<b>1)Add-In Wizard</b>

建立一個項目:

Visual Studio 2008 可擴充性開發(二):Macro和Add-In初探

在Other Project Types-&gt;Extensibility中可以看到Add-In項目模闆,項目名稱設定為FirstAddin,OK。出現歡迎界面,點選Next,進入向導第一步,選擇一種語言,如C#,點選Next進入第二步。

Visual Studio 2008 可擴充性開發(二):Macro和Add-In初探

這裡可以選擇Add-In運作的宿主環境,隻保留VS 2008,Next進入第三步,設定Add-In的名稱和描述資訊,進入第四步:

Visual Studio 2008 可擴充性開發(二):Macro和Add-In初探

選中第一個選項,這樣VS會在Tools菜單中添加一個新菜單項,剩下的部分一路Next下去即可。最後VS會建立一個新的項目,其中包含了Connect.cs檔案,這就是今後我們的主戰場了。

打開Connect.cs,如果這是你的Add-In初體驗,也許會覺得代碼有些奇怪,進而感覺有些慌亂,不用擔心,很快你就會熟悉它了。找到OnConnection方法,Add-In就是在這裡加載,搜尋文本"commands.AddNamedCommand2"(大約在77行),這一行建立了一個新的菜單項,将其AddNameCommand2的第二、三個參數都改為"InsertDate"。将QueryStatus和Exec方法稍作修改:

Visual Studio 2008 可擴充性開發(二):Macro和Add-In初探

C# Code - QueryStatus 和 Exec方法

按下F5進行調試,此時打開一個新的IDE視窗,在新的視窗中可以測試Add-In的功能,随便打開一個解決方案,然後打開一個代碼檔案,檢視Tools菜單:

Visual Studio 2008 可擴充性開發(二):Macro和Add-In初探

點選新菜單項,看看編輯器内是不是插入了目前日期?注意,這個菜單項隻有在調試的時候才會出現。

好,我們第一個Add-In也建立成功了。它頗為簡陋,而且菜單項放在編輯器的上下文菜單中會更好,這裡先放一放,在後面的文章中我會對此作出修改。

<b>我們身在何處</b>

本文将通過兩個例子說明了Macro和Add-In的開發。希望這些能讓你對兩者有個基本的認識。在随後的随筆中,我将對Add-In展開詳細的介紹。

<b>參考</b>

《Professional Visual Studio® 2008 Extensibility》

《Working with Microsoft Visual Studio® 2005》

本文轉自一個程式員的自省部落格園部落格,原文連結:http://www.cnblogs.com/anderslly/archive/2009/02/25/first-macro-addin.html,如需轉載請自行聯系原作者。

繼續閱讀