本文為閱讀Inside the Visual Studio SDK筆記。
擴充VS的方法很多,最常見的有三種:Automation,VSPackage extensions,Managed Extensibility Framework(MEF) extensions.
Automation:主要用來做一些可以被自動化的重複性任務,以宏(macros), 外掛程式(add-in),嚮導(wizard).
VSPackage extension:VS有很多組件都是VSPackage,例如:調試器(debugger), 工具列(predefined toolbar).VSPackage是擴充VS強有力的方法,它可以訪問並且擴充VS的很多組件,例如:shell和項目系統(project system).
MEF(Managed Extensibility Framework) :MEF是一個擴充機制,可以在不建立VSPackage的情況下自訂和擴充編輯器(editor).[不解]
VS Extensibility Model (VS可擴充模型)
VS可擴充模型是由不同的庫(library)組成的,以便讓新的擴充訪問VS的各個組件.
最基礎的模型是VS API是一系列的介面(interface),微軟的員工就是用它們開發出了VS.對於Unmanaged 程式碼,你可以用一個基於模板的VSL(VS Library) 來寫擴充.
如果你選用Managed 程式碼,你可以用直接用VS interop assemblies(Interop 組件??),或者選用MPF(Managed Package Framework, 不同於上面的MEF哦) 提供的類,這些類封裝了很多VS API的介面.
你如果需要擴充編輯器,你可以用編輯器程式集或者MEF程式集.[不解]
閱讀更多:
VS服務(Services)
一個服務提供一系列介面.VS提供一系列服務可以被任何包括擴充在內的任何組件使用.例如:服務可以讓工具視窗動態顯示/隱藏,訪問協助,狀態列,UI事件.VS2010的編輯器提供的服務可以被編輯器的擴充匯入.
閱讀更多:
VS可向外延展群組件
常被擴充的組件有:
Shell命令(Commands)
功能表列和工具列
工具視窗(Tool Windows)
文件視窗(Document Windows)
編輯器(Editor)
語言服務(Language Service)
項目(Project)
模板(Template)
命令(Command)
命令是一些任務,例如:列印文檔,重繪視圖,建立新檔案.
你可以建立並把這些命令註冊到VS.你可以決定這些命令出現在VS的什麼地方,例如:菜單或者工具列.一般來講,自訂的命令出現在"工具(Tools)"菜單,會顯示工具視窗的命令一般出現在"View"的子功能表"Other Windows”裡面.
必須給命令建立一個事件響應(Event handler).The event handler determines when the command is visible or enabled, lets you modify its text, and guarantees that the command responds appropriately when it is activated. In most instances, the IDE handles commands by using the IOleCommandTarget interface. Commands in Visual Studio are handled starting with the innermost command context, based on the local selection, and proceeding to the outermost context, based on the global selection. Commands added to the main menu are immediately available for scripting.
閱讀更多:
How VSPackages Add User Interface Elements to the IDE.
菜單和工具列
這段都是廢話,說菜單可以調用命令,有主菜單,子功能表,和操作功能表(右鍵菜單).
閱讀更多:
Common Menu Tasks
這段又是廢話,講什麼是工具列的.
閱讀更多:
Menu and Toolbar Essentials
Default Command, Group, and Toolbar Placement
工具視窗(Tool Windows)
工具視窗的例子:Toolbox, Solution Explorer,Properties視窗,Web Browser.
工具視窗提供了多種多樣的可與使用者互動控制項.比如屬性(Properties)視窗讓使用者可以設定對象的屬性,並且可以用於不同的情景.輸出(Output)視窗也類似.等等...
看列出了幾個VS的工具視窗:
不同的視窗可以停靠(Dock)在一個面板(Pane)上.
的主文件視窗顯示了幾個編輯器視窗停靠在一個面板上.
當你建立並且正確註冊了你的工具(或編輯器)視窗擴充,他們自動擁有了和原有工具視窗一樣的停靠等特性.
閱讀更多:
文件視窗(Document Windows)
文件視窗的概念是MDI(Multiple-document interface)的視窗,例如:文檔編輯器,設計器(Designer)等...
文件視窗一般會與檔案的類型關聯起來,例如:HTML,C++檔案等..
閱讀更多:
編輯器
編輯器是VS2010的新組件.編輯器本身是一個VSPackage,你可以通過MEF來擴充它,大部分情況下不用建立新的VSPackage.當你想使用比如功能表命令或者快速鍵的時候,你可以建立一個帶MEF的VSPackage.
在你想有一個自訂的設計器之類組件時,你可以建立一個編輯器.
閱讀更多:
Editors
語言服務(Language Service)
需要支援新的程式設計語言時,需要建立一個語言服務. 語言服務提供諸如:文法高亮,智能提示等編輯器特性.
語言服務的核心是一個解譯器(parser)和一個掃描器(scanner)或者稱詞法分析器(lexer).Scanner把源檔案分成叫做tokens的元素,parser確定這些token的關係.
你可以建立託管和非託管的語言服務.
閱讀更多:
Implementing a Language Service By Using the Managed Package Framework.
Walkthrough: Creating a Language Service (Managed Package Framework)
Developing a Language Service
項目(Projects)
Project用來組織和build原始碼和其他資源.可以通過用VSPackage提供Project 類型,Project子類型,自訂工具來擴充VS的項目系統.
Solution是一個或多個Projects.Solution儲存在.sln檔案裡.
閱讀更多:
項目和Item模板
模板包含了項目的結構和基本檔案.
閱讀更多:
Adding Project and Project Item Templates.
整合(Integrated)和獨立(Isolated)應用程式.
一個整合到原有的VS裡面,一個包含了獨立的一個VS空殼.
閱讀更多: