首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Visual Studio 2008 擴展性開發(二):Macro 與 Add-In 入門實戰

     編輯:關於.NET

前文回顧 VS 歷史。本文以兩個簡單範例切入 Macro 與 Add-In 開發。Macro 錄製重複操作,節省時間;Add-In 讓我們親手為 VS 新增功能,擴展 VS 即擴展自己。

VS 2008 擴展方式總覽

三大主流:Macro、Add-In、VsPackage。其他選擇:VS Shell、DSL Tools、Visualizer、Code Snippet、專案/項目範本、MSBuild、External Tools。本文聚焦 Macro 與 Add-In,兩者共用 API,了解 Macro 有助 Add-In 開發。

開發第一個 Macro

程式員最怕重複。Macro 將 VS 中重複操作錄製下來,可重複執行。兩種建立方式:錄製(簡單)、手寫代碼(靈活強大)。注意:僅支援 VB.NET。

結合兩法:不知如何寫代碼時,先錄製再查看生成代碼(如早期 VBA 開發 Excel 自動化)。

1. Macro Explorer

工具 → 巨集 → 巨集總管 (Alt+F8):

Macro Explorer

右鍵「新增巨集專案」,命名 FirstMacro,設為錄製專案。

新增巨集專案

2. 錄製巨集

Ctrl+Shift+R 開始,工具列可暫停/停止。執行操作:

  1. Ctrl+F 開啟尋找取代
  2. 輸入 ":a+"(含引號),範圍「目前文件」,勾選「使用規則運算式」
  3. 點選「尋找下一個」
  4. Ctrl+Shift+R 停止

3. 執行巨集

Alt+F8 開啟總管,右鍵執行 TemporaryMacro:

執行巨集

發現問題:切換文件後仍在原文件搜尋。查看代碼發現錄製時連文件名也錄入。

4. 修改巨集

右鍵編輯,進入 Macro IDE:

Sub TemporaryMacro()
  DTE.ExecuteCommand("Edit.Find")
  DTE.Windows.Item("ListViewSample.cs").Activate()  ' 問題行
  DTE.Find.FindWhat = """:a+"""
  DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocument
  ...
  If (DTE.Find.Execute() = vsFindResult.vsFindResultNotFound) Then
    Throw New System.Exception("Sorry, I cannot find it:(")
  End If
End Sub

註解掉指定文件名的行,修改例外訊息,即可正常跨文件使用。

開發第一個 Add-In

常見 Add-In:DPack、TestDriven.NET、GhostDoc。Add-In 編譯為 DLL,VS 啟動時載入,與 IDE 整合,部署無需原始碼。支援任意 .NET 語言(C#、VB.NET、VC、理論上 F#)。可操作方案、專案、檔案、編輯器、工具視窗,是擴展 VS 的專業方式。

範例功能:向編輯器插入目前日期。

1. Add-In 精靈

新增 Add-In 專案

Other Project Types → Extensibility → Add-In,命名 FirstAddin。精靈步驟:語言選 C#,宿主保留 VS 2008,設定名稱描述,勾選「在 Tools 選單新增項目」,其餘一路 Next。

精靈步驟

完成後專案含 Connect.cs(主戰場)。

2. 修改生成代碼

在 OnConnection 找 commands.AddNamedCommand2,將第 2、3 參數改為 "InsertDate"。修改 QueryStatus、Exec:

public void QueryStatus(string commandName, ...) {
  if (neededText == vsCommandStatusTextWanted.vsCommandStatusTextWantedNone) {
    if (commandName == "FirstAddin.Connect.InsertDate") {
      status = vsCommandStatus.vsCommandStatusSupported | vsCommandStatus.vsCommandStatusEnabled;
      return;
    }
  }
}

public void Exec(string commandName, ...) {
  handled = false;
  if (executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault) {
    if (commandName == "FirstAddin.Connect.InsertDate") {
      TextSelection selectedText = _applicationObject.ActiveDocument.Selection as TextSelection;
      selectedText.Text = DateTime.Now.ToShortDateString();
      handled = true;
      return;
    }
  }
}

3. 偵錯測試

F5 啟動實驗性 VS 執行個體,開啟方案與代碼文件,查看 Tools 選單:

Tools 選單新增項目

點選新項目,編輯器插入目前日期。注意:僅偵錯時出現。

本篇小結

以兩個範例建立 Macro 與 Add-In 基本認識。後續將深入 Add-In 開發細節。程式碼託管於 Google Code。

出處:https://anderslly.cnblogs.com

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved