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

Visual Studio 2008 擴展性開發(三):Add-In 運行機制核心剖析

     編輯:關於.NET

上篇以 Hello World 入門 Macro 與 Add-In。Macro 簡單,但商業軟體中可能面臨效能與智財問題,Add-In 才是更好的選擇。向導雖強大,但《程式設計師修練之道》警告:「Don't Use Wizard Code You Don't Understand」。我們必須理解向導生成的代碼,因它們最終會成為你的代碼一部分。

Add-In 向導收集的資訊

六步驟收集:

  • 程式語言(C#/VB.NET/VC)
  • 宿主環境(可同時支援多版本 VS IDE / Macro IDE)
  • 名稱與描述
  • 選單命令(產生代碼在 Tools 選單新增項目)
  • 命令列執行支援(無需使用者介入的 UI)
  • 啟動時載入、About 對話框資訊

Add-In 專案結構

本質為類別庫專案,包含:

  • Connect.cs:實作 IDTExtensibility2(核心通訊)與 IDTCommandTarget(命令目標,勾選 UI 選項時需實作)
  • .AddIn 設定檔

Connect.cs 核心解析

IDTExtensibility2 五方法:

  • OnConnection:載入時調用
  • OnStartupComplete:啟動載入完成後調用
  • OnAddInsUpdate:Add-In 載入/卸載時調用
  • OnBeginShutdown:VS 關閉時調用
  • OnDisconnection:卸載時調用

關鍵命名空間:Extensibility、EnvDTE、EnvDTE80。

OnConnection 最關鍵:

public void OnConnection(object application, ext_ConnectMode connectMode,
  object addInInst, ref Array custom) {
  _applicationObject = (DTE2)application;  // 取得 AOM 根物件
  _addInInstance = (AddIn)addInInst;       // 取得 Add-In 實例
  if (connectMode == ext_ConnectMode.ext_cm_UISetup) { ... } // 建立 UI
}

connectMode 為 ext_cm_UISetup 時建立選單命令(向導做法)。其他四方法向導未產生代碼。IDTCommandTarget 的 QueryStatus、Exec 則有基本命令管理代碼。

.AddIn 設定檔

XML 格式,向 VS 註冊 Add-In:

<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<Extensibility xmlns="https://schemas.microsoft.com/AutomationExtensibility">
  <HostApplication>
    <Name>Microsoft Visual Studio</Name>
    <Version>9.0</Version>
  </HostApplication>
  <Addin>
    <FriendlyName>MyFirstAddin</FriendlyName>
    <Description>MyFirstAddin, it's so exciting!</Description>
    <Assembly>FirstAddin.dll</Assembly>
    <FullClassName>FirstAddin.Connect</FullClassName>
    <LoadBehavior>0</LoadBehavior>
    <CommandPreload>1</CommandPreload>
    <CommandLineSafe>0</CommandLineSafe>
  </Addin>
</Extensibility>

三大資訊類別:

  1. 宿主環境:<HostApplication>,可多個,<Version> 可用 * 表支援所有版本
  2. Add-In 資訊:<Addin> 節點
    • FriendlyName、Description:可選
    • AboutBoxDetails、AboutIconData:About 對話框用
    • Assembly(必填)、FullClassName(必填,完整類別名)
    • LoadBehavior:0=手動、1=啟動載入、4=命令列
    • CommandPreload:預先載入
    • CommandLineSafe:命令列安全/無 UI
  3. 選項頁資訊:<ToolsOptionsPage>,後續文章介紹

CommandBar.resx

儲存命令列文字的多語言資源,Connect.cs 取得 Tools 選單名稱時使用。

部署與載入管理

專案含 FirstAddin - For Testing.AddIn 指向輸出目錄組件,F5 偵錯時使用。正式部署:刪除測試檔,將組件與 .AddIn 複製至 [My Documents]\Visual Studio 2008\Addins。

Add-In Manager

透過 工具 → 增益集管理員 載入/管理。

本篇小結

核心重點:Connect.cs 為實作類別,.AddIn 為設定檔。理解兩者,即掌握 Add-In 運行機制。下一篇將介紹生命週期與事件。

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

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