當前位置:
首頁 > 最新 > VisualStudio插件開發

VisualStudio插件開發

如何進行VS IDE擴展

要利用VS SDK進行開發,你需要安裝Visual Studio 以及Visual Studio SDK。你可以下載並安裝Visual Studio 專業版(或者你可以從別的渠道獲得它)。你可以訪問Visual Studio 擴展開發者中心(http://msdn.com/vsx)下載Visual Studio SDK.

Visual Studio 2013 默認隱藏了其他項目類型下的擴展性項目,需要安裝SDK以後才可以創建VS擴展項目,之後才可以創建VS的擴展性項目。

什麼是Visual Studio Package?

VSPackage是構建Visual Studio的一個基本的單元。實際上,Visual Studio是由一系列的VSPackage協同工作而成的,就像一個生態系統一樣。一個Package,不論是從VS體系結構上來看,還是從部署、安全和許可認證方面來看,它都是VS的一個基本單元。另外,在物理上,一個或多個package可以存在於同一個程序集中。

開發者(包括Visual Studio的開發者)通過創建VSPackage來擴展VS IDE。這些擴展可以是:

1、服務(Service)。服務是一些對象,它們提供功能供開發者或者其他package調用。例如,C#語言服務(顧名思義)是一個服務。

2、界面元素。例如菜單、工具欄、窗口等,開發者可以用它們在用戶界面上執行一些動作,顯示消息、信息和圖片等等。

3、編輯器。在開發過程中,我們通過編寫程序去創建應用程序。編寫程序這項任務是由編輯器負責的。Visual Studio 2008有它自己的核心編輯器,但是我們也可以在VSPackage中創建我們自己的編輯器。

4、設計器。應用程序的創建不只是簡單的敲入文本這麼簡單。我們擁有很多被稱為設計器的可視化工具,我們可以利用他們來設計模塊、組件、零部件、甚至整個應用系統。著名的例子是WinForm設計器,我們可以用它來創建WinForm的用戶界面。

5、項目。當開發應用程序的時候,我們一般會面向一大堆的文件。項目用來組織這些源文件和資源,並且不是簡單的存儲這些文件這麼簡單,它還可以用來編譯、調試和發布由源文件創建的產品。

什麼是服務(Service)?

一般來講,我們不會為了開發package而開發package。我們創建package是因為它們不但可以為我們自己提供功能(此時,我們是消費者),也可以為其他的package提供功能(此時,其他package是消費者)。例如,假設我們的package提供了一個工具窗去查找特定方法的引用,我們就是這個窗口的消費者。如果這個package不僅為這個工具窗提供查找功能,也作為「可調用的方法」為其他package服務,那麼其他package就是這個服務的消費者。

所以,服務是package之間或package和與它相關的對象(當我說「package的對象」時,我指的是窗口、命令、設計器等這些被package自己創建的東西)之間的契約。

VSPackage可以包含服務,這些package被稱為service provider。能給其他package調用的服務被稱為全局服務,package也可以包含只能被自己調用或者只能被package的對象調用的服務。這種服務被稱為本地服務。

使用Service

關於VSX中的服務,有一個壞消息:它們是隱蔽的,不容易被發現。這意味著我們不能猜測出一個package(或其他對象)中能提供哪些服務。

所以,如果你想使用一個服務,你必須「通過它的名字調用它」,這意味著你必須知道這個服務的名字。要知道服務的名字,唯一的方法是去查閱這些服務所在package提供的文檔。VSX的文檔里列出了大概130個服務。

一般來說,服務被定義成介面。大部分服務只實現一個介面,但也有一部分服務實現了多個。所以,當我們想使用一個服務的時候,我們必須要知道兩個「名字」:服務的名字和介面的名字。

VSX中的程序集

Visual Studio的主體部分是建立在非託管代碼上的,並支持COM類和介面。為了訪問到COM對象,.NET提供了一種被稱為interoperability程序集的東西,簡單來講,就是用.NET類型來包裝了COM類型。我們有兩種主要的方法去使用VSX中的COM對象:創建非託管代碼(例如用C++);或者利用interoperability程序集中來編寫託管代碼(用c#或VB.NET)。

VSPackage是基於COM技術的。Visual Studio提供了interop程序集來訪問COM類型;MPF(ManagedPackage Framework)對interop程序集做了一層包裝,允許用「本地化」的託管代碼開發Package。

三種擴展方式

有很多方法去擴展Visual Studio(甚至是Team Foundation Server),VS擴展是對這些方法的一個統稱。對於編程方面來說,VS擴展的主要方式是通過宏、Add-ins和Visual Studio擴展包(Package)。

我們對Office產品中的宏已經很熟悉了,和在Office裡面一樣,我們也可以通過宏來擴展Visual Studio 。這是擴展VS的最簡單的方式——我們甚至不需要VS SDK。Visual Studio提供了功能允許我們去錄製宏,宏可以訪問的Visual Studio 的對象模型,並且可以很容易和和VS的命令融合,並提供非常有用的、自動化的屬性值。

要成為一個非常專業的VS宏開發人員,你需要知道在宏後面的對象模型以及一些使用他們的方法。Visual studio 提供了一些例子。最好的辦法是自己錄製一些宏然後查看其中的代碼,你可以通過這些代碼來增加你的對宏的掌握。

儘管宏對於任務自動化非常棒,但是它並不能用於創建全新的功能。簡單來說,宏利用了VS IDE的自動化介面,但是它並沒有真正和和VS集成。當用宏開發的時候,你必須認識到任何人都可以通過宏來查看你的源代碼。

Visual studio Add-ins

Add-ins具有更加強大的功能來擴展visual studio,因為它可以訪問Visual studio 的所有對象模型並添加新的UI元素,例如工具窗口、選項頁、菜單以及工具欄命令等等,這些添加的功能看起來就行IDE的一部分。Add-ins還可以訪問由IDE自己以及其他的Add-in提供的service。

品牌也被得到保證,因為插件信息會在Visual studio啟動時顯示的界面里或者「關於」對話框中顯示。如果你用宏來擴展VS,宏那麼所有人都可以看到你的源代碼,但是一個Add-in是編譯了的程序集,所以你可以像其他.NET 程序集一樣,使用一些保護技術來保護你的代碼。

要發布插件,你只需要簡單的創建一個安裝項目並編譯出.msi文件就可以了。msi程序會做你的Add-in需要的所有的安裝和註冊任務,安裝後你就可以立即使用插件了。

對於一些簡單的功能來所,插件是最簡單的開始方式。但在這個系列中,我並不會關注如何開發Add-ins,不過Add-in中那些用於VS Package的技術,尤其是如何使用VS IDE提供的對象模型,是非常有用的。

更多精彩(MetaShare)


點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 麥特賽爾軟體 的精彩文章:

人有人的語言,動物有動物的語言,電腦有程序的語言
你想學會一項能上天的技能嗎——網站應用
科技——用於現場服務管理的魔法象限17

TAG:麥特賽爾軟體 |