|
擴展能夠為核心應用程序提供附加的功能或者自定義設置。在很多應用程序中這都是很流行的,包括流行的web瀏覽器IE和Firefox、微軟的Office、媒體播放器、Photoshop、Eclipse、Visual Studio等等。其中有些可能比較新奇,而針對開發工具——像Eclipse和Visual Studio——的擴展讓開發者的生產力得到了顯著提高。
Visual Studio早期的版本是構建在COM技術之上的。而Visual Studio的主要擴展方式插件是通過COM接口實現的。隨著時間的變化,插件機制已經得到了改善。在2002年,隨著Visual Studio .NET的發布,微軟引入了.NET和COM之間的互操作性。在Visual Studio 2005中,插件支持使用XML的簡化部署方式。之后不久,微軟發布了Visual Studio SDK開發包,這是一種更為新式的機制,通過底層的API提供了與Visual Studio的IDE更深層次的整合。
隨著時間的推移,Visual Studio擴展的部署技術也得到了改善。在Visual Studio 2005中引入了Visual Studio 內容安裝器(Content Installer VSI),它可以用于部署宏、插件、工具箱控件、代碼片段以及模板。而更廣泛地用于應用程序安裝的Windows安裝包(MSI),則成為針對Visual Studio包的主要部署技術。 VSI和MSI格式的文件中都包含了完整的分發包。
這種設計導致了一些交付問題。為了獲得擴展,用戶需要在不計其數的網絡站點中搜索、下載和安裝。管理擴展的依賴關系和更新既不簡單,也不易懂。
在Visual Studio 2010增加的多種新特性中,新的擴展管理器就是為了解決擴展部署問題的。它遵循了一種新的用于發布和部署第三方擴展的趨勢,這種趨勢是由于像Firefox和Eclipse這樣的項目而變得流行。
本文會向你介紹Visual Studio 2010的擴展管理器。你會了解到如何構建簡單的擴展,并把它部署到Visual Studio Gallery中。
嶄新的用戶體驗
應用程序擴展是與核心應用程序分別發布的。傳統上認為它們更像是獨立的應用程序。盡管隨著時間的推移,Visual Studio擴展性的很多方面都得到了改善,然而交付機制還是沒有太多的改變。它遵循的是雙擊工作流(double-clicking workflow),那并不容易。
在哪里能夠找到擴展?
如何管理擴展的生命周期,包括安裝、更新和卸載?
在過去,想要找到針對Visual Studio的正確的擴展,我們需要做大量的搜索工作。開發者可以在InterNET上搜索擴展,或者可以從雜志的文章中、論壇的帖子中或者博文中獲得擴展的信息。但我們很難發現所有可用的選擇,而且也很難對類似的擴展進行比較。
有了Visual Studio Gallery之后,這種狀況已經得到了改變。這個站點是Visual Studio擴展的官方和集中資源所在。你可以瀏覽并且訂閱擴展的RSS。你還可以閱讀評論,并提供你的反饋,對擴展打分。
Visual Studio 2010的擴展管理器是與Visual Studio Gallery結合使用的。它把Visual Studio Gallery帶到了Visual Studio IDE中(如圖1所示)。我們不再需要使用web瀏覽器來搜索或者運行安裝程序了。在Visual Studio 2010中,我們可以通過Tools | Extension Manager菜單來打開擴展管理器。當擴展管理器打開之后,它會列出已經安裝了的擴展。如果對于擴展有更新可用,也會在其中列出來。在左邊的面板中,點擊“Online Gallery”標簽頁,你就可以瀏覽和搜索在“Visual Studio Gallery”中可用的擴展了。當你選擇一項擴展,相關的描述就會顯示在右側的面板中。點擊“下載”按鈕,擴展管理器馬上就會開始下載選中的擴展。
圖1 Visual Studio 2010的擴展管理器
有時,安裝一項擴展需要重啟Visual Studio。這也沒關系。 IDE會返回之前的樣子,載入最新的解決方案。刪除擴展同樣很容易。通過Tools | Extension Manager 菜單打開擴展管理器,選擇擴展,然后點擊“Uninstall”按鈕。
它不僅提供了簡單的方式,讓我們可以在Visual Studio IDE中搜索和安裝擴展。還提供了對擴展完整的生命周期管理。我們還可以在Visual Studio IDE中對擴展進行啟用/禁用、更新和卸載。
在擴展管理器中啟用和禁用擴展的能力是值得一提的。正如你將在本文的下一部分將會看到的,創建擴展并把它上傳到Visual Studio Gallery中要比之前容易得多。再也沒有批準流程。上傳的內容馬上就可以訪問。這可能有些風險。某些擴展會有質量問題,或者與其它擴展沖突。在那種情況下,禁用特性會為其提供幫助。
自動的擴展更新通知也是很棒的特性。每次你打開VS 2010的一個實例的時候,它就會自動檢查已經安裝的擴展的更新。當找到更新的時候,它就會在系統托盤中顯示通知圖標。點擊通知,它就會載入擴展管理器來安裝新的更新。這確保你能夠擁有最新的擴展更新,而不需要手動地搜索更新。
有一些擴展對于開發者是必需的。在InterNET上,人們會告訴你他們最喜歡的擴展。在此我列出了我所選擇的部分。建議你嘗試使用它們。那很容易,并且如果你不喜歡,總是可以禁用并卸載它們。
Visual Studio Productivity Power Tool,這是一組用于提高生產力的工具,像解決方案導航器、帶有改良的標簽頁的用戶界面、可搜索的添加引用對話框,等等。
· Snippet Designer,這種擴展讓你可以在Visual Studio中創建代碼片段。
· Spell Check,這種擴展為純文本文件、注釋、字符串和HTML/ASP代碼提供了拼寫檢查功能。
· Tangible T4 Editor,這種擴展為T4模板提供了智能提示和語法的突出顯示。
· GhostDoc,這是一種能夠為C#生成XML文檔注釋的擴展。
· Feature Builder Power Tool,這種擴展會幫助你創建擴展。
· PowerGUI,這種擴展為PowerShell 腳本提供了智能提示和語法的突出顯示。
· IronPython IronRuby Console,這種擴展讓你能夠在IronPython/IronRuby中與Visual Studio交互。
擴展管理器的體驗讓我們想到了一些直觀的流程,像下載軟件到iPhone、下載插件到Firefox、以及從Amazon下載書籍到Kindle上等等。這可能就是消費軟件部署的趨勢。它是基于InterNET或者云,并且與應用程序整合的部署方式。根據最近在網上泄露的“Windows Store for Windows 8”,我們可能會在下一版本的Windows中看到這種軟件部署方式。
現在,Visual Studio 2010擴展管理器和Visual Studio Gallery更加以擴展為中心。將來,它會更加以用戶為中心。我希望它會記住我所選擇的擴展,并在所有我登陸的計算機中應用那些擴展。
在“創建簡單的擴展”部分中,我會一步一步地創建Hello World擴展。
在嘗試這些步驟之前,你需要確保已經下載并安裝了Visual Studio SDK。
創建Visual Studio Package項目
首先,使用“Other Project Types | Extensibilities”下面的Visual Studio Package Project模板創建新的項目。
圖2 Visual Studio Package Project 模板
它會載入Visual Studio Package向導,它有七頁,我們可以在其中為Hello World包填寫基本的信息。這是很簡單的過程。在第三步中,我選擇了“Menu Command”和“Tool Window”選項,從而展現最初針對菜單項和工具窗口的代碼。(圖3)
圖3 創建菜單命令和工具窗口
檢查項目結構
在創建了項目之后,讓我們來檢查其中都有什么。有些東西是值得注意和說明的。
其中有一個source.extension.vsixmanifest文件。在這個文件中,會生成我們在新建項目向導中輸入的信息,還有包的引用和內容。它擁有屬于自己的編輯器(圖4)。
圖4 編輯器中的source.extension.vsixmanifest文件
在項目的屬性頁中,有一個新的VSIX標簽頁,讓Visual Studio在調試擴展的時候,構建和/或部署VSIX的過程中創建VSIX文件。
圖4.1 項目屬性頁中的VSIX標簽頁
在Visual Studio 2010之前,擴展是作為安裝包部署的,這多少和單獨的應用程序有些類似。它們是在Visual Studio之外使用VSI或者MSI分別安裝和維護的。開發者經常會認為編寫Visual Studio擴展很難,或者那不是一般開發者所能夠完成的。那是對的。此外,為Visual Studio擴展創建安裝包更困難。
為了給Visual Studio 2008擴展創建安裝包,MSDN上的一篇文章“教程:簡單的VSPackage部署”建議使用xcopy、安裝項目,或者使用Windows Installer XML Toolset (WiX)。在所有情況下,開發者都不得不學習MSI、WiX,或者理解注冊表的鍵值以注冊擴展。
使用安裝項目的方法,開發者需要編寫自定義的安裝動作來注冊擴展。使用WiX既耗時又容易出錯,因為那需要手動編輯XML文件,并且維護很多GUID值。默認情況下,WiX安裝只有最少的功能。開發者需要操作更多的XML文件來提供功能,像定義安裝文件夾以及顯示許可信息等等。
在Visual Studio 2010中,對于開發擴展至少在兩個方面做出了改進。使用VSIX來對擴展打包更容易。 VSIX是在Visual Studio 2010中引入的針對擴展的部署單元。VSIX文件是一種使用了開放打包協議(Open Packaging Convention)的壓縮文件。我們可以從本地硬盤中像VSI和MSI的方式安裝VSIX。 Visual Studio會識別出VSIX的文件擴展名,把它解壓并把文件安裝在正確的位置中。它還可以通過Visual Studio Gallery進行發布和升級。當你構建擴展項目的時候,Visual Studio 2010擴展項目模板就會生成VSIX文件。
在Visual Studio 2010中,開發者需要處理XML文件。但是開發者不需要編輯原始的XML文件,Visual Studio 2010為其提供了編輯器。那就是新的VSIX說明文件編輯器(圖3)。你所需要做的就是指定相同的VSIX ID——唯一的標識符,以及新的版本號。然后把它上傳到Gallery中,這樣擁有舊版本的用戶就可以下載更新。
VSIX本質上是一種簡單的xcopy部署方式。安裝就是要對包進行復制和解壓。卸載只是刪除文件夾。它不支持高級的安裝特性,像為GAC添加程序集或者創建桌面快捷方式等等。它也不會在Visual Studio之外寫入注冊表。它不支持自定義的動作。 MSDN上名為“Visual Studio 擴展部署”的文章對VSIX和MSI能做的和不能做的做了詳細的說明。
VSIX主要是為了Visual Studio擴展部署而設計的,并且使用Visual Studio Gallery來發布。
構建項目
在構建了項目之后,構建的輸出包括封裝后的DLL、包定義文件(pkgdef)以及VSIX文件(圖5)。
VSIX文件是包的部署文件,你可以把它發送給用戶來進行安裝,或者上傳到Visual Studio Gallery中。
圖5 構建輸出
調試和運行擴展
在項目的屬性頁中,調試選項被設置為載入Visual Studio實驗環境。(圖6)
圖6 項目的調試設定
按下F5,就會載入部署了VSIX的Visual Studio實驗環境的新實例。 Visual Studio實驗環境會與Visual Studio開發環境并行運行。它是用于開發和測試Visual Studio包的沙盒環境。部署在實驗環境中的包不會影響你的主開發環境。實驗環境擁有自己的設定、注冊表項和擴展。我們可以使用開始菜單中的“重置微軟Visual Studio 2010實驗實例”選項,把它重置為干凈的狀態。
我們創建的簡單擴展會在Tools菜單下添加“Hello World”菜單項(圖7),并在“View| Other Windows”下添加“Hello World Tool Window”菜單(圖8),我們可以使用它來顯示工具窗口(圖9)。
圖7 Toos菜單下的“Hello World”菜單
圖8 “View| Other Windows”下的“Hello World Tool Window”菜單
圖9 擴展的工具窗口
包的主要入口點在于Microsoft.VisualStudio.Shell.Package的子類中。它擁有多個與包的注冊相關的屬性,我們會在安裝和注冊的過程中使用它們。(圖10)
圖10 Package類
你可以在名為Initialize的重載函數中編寫代碼,從而在載入你的包時與Visual Studio交互。在我們簡單的包中,“Hello World”和“Hello World Tool Window”菜單都是在這個初始化函數中創建的。
圖11 Initialize函數
菜單的回調函數是MenuItemCallBack和ShowToolWindow。當點擊“Hello World”菜單的時候,就會觸發MenuItemCallBack 函數。默認的代碼是要顯示一個消息框。它是你的包邏輯的起始點。當點擊“Hello World Tool Window”菜單的時候,就會觸發ShowToolWindow函數。默認的代碼是以標準的方式彈出工具窗口。
工具窗口是Visual Studio IDE的子窗口。和工具箱、解決方案管理器和屬性窗口一樣,它可以停靠、浮動或者以標簽的形式顯示在文檔框架中。它們是動態的(或者說是自動可見的)。有了Visual Studio 2010對多顯示器的支持,工具窗口也可以脫離開來,并拖拽到第二臺顯示器中。 Visual Studio Package Project模板默認情況下會為工具窗口創建WPF的用戶控件。
現在我們已經有了Visual Studio Package的骨架,可以構建他來生成可以分發的VSIX文件,我們或者可以通過復制的形式或者通過Visual Studio Gallery來分發它。
發布到Visual Studio Gallery
想要通過Visual Studio Gallery來發布擴展,只需要三步,就可以發布你的擴展,從而讓全世界的開發者都能夠訪問到它。
·選擇你的擴展的類型
·上傳VSIX文件
·添加附加的類別和描述。
Visual Studio Gallery會從VSIX中取得元數據,包括名稱、ID、版本、公司、許可以及產品的圖片。擴展管理器會使用版本號來自動管理擴展的更新。
圖12 Visual Studio Gallery
當你的擴展有新版本時,你所需要做的就是在VSIX的說明文件編輯器中更改版本號,構建新的VSIX文件并上傳到Visual Studio Gallery中。這樣,更新就馬上可以提供給用戶下載了。當用戶啟動Visual Studio新的實例時,Visual Studio就會在系統托盤顯示新的更新通知。
有時這是很方便的,因為Visual Studio Gallery沒有驗證過程。發布擴展就像在推特上發布一條消息一樣簡單。對擴展開發者的一項提示是,你應該盡可能地測試以保證質量。你不應該先上傳擴展,然后才開始測試,因為它馬上會被大家所發現。 VSIX支持雙擊安裝,就像VSI和MSI一樣。如果其中有bug,那么就使用擴展管理器來卸載它,創建新構建的VSIX,然后雙擊它來安裝并進行測試。在開發過程中,你不需要提升版本號。記著在完整地測試之后在把它上傳到Visual Studio Gallery中。
這會帶來另一種提示。 Visual Studio Gallery不支持私有分發。如果你的擴展只在你的公司的開發者中使用,那么你就不應該把它上傳到Visual Studio Gallery中。相反,你應該在公司內部發布VSIX文件。在這種情況下,想要更新擴展,你需要手動地與擴展用戶溝通。
Visual Studio Gallery的目的之一就是要創建Visual Studio擴展的生態系統。自從幾年之前它可以用于Visual Studio 2008開始,人們已經上傳了上千個擴展。與其說是一種商業集市,不如說是一種社區分享站點,就像Apple的App Store和Windows Phone Marketplace一樣。如果開發者想要銷售他們的擴展,那么就需要找到其它廠商和付費服務,就像舊式的共享軟件發布一樣。用戶無法通過擴展管理器付費。結果是,擴展管理器和Visual Studio Gallery為開源和免費的擴展項目提供了優秀的支持。
總結
Visual Studio 2010的擴展管理器和Visual Studio Gallery提升了擴展用戶和擴展開發者的用戶體驗。你應該始終記著,那里有成千上萬的擴展可供你擴充Visual Studio的特性。還應該始終記著,你可以在Visual Studio中搜索和管理擴展的生命周期。如果你對于擴展Visual Studio有什么好主意,那么我建議你試著創建一些Visual Studio擴展。 Visual Studio擴展會提升開發的生產力。
NET技術:詳解Visual Studio 2010中的擴展管理器,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。