2017 年 8 月

第 32 卷,第 8 期

本文章是由機器翻譯。

Visual Studio - 建立適用於多個 Visual Studio 版本的延伸模組

Carlos Quintero |2017 年 8 月

新版本的 Visual Studio 版本一律是延伸模組 (封裝、 增益集、 範本和其他等等) 的開發人員的挑戰。例如,Visual Studio 2010 導入新的 Visual Studio Installer 擴充功能 (VSIX 檔案);Visual Studio 2012 導入淡/濃佈景主題。和 Visual Studio 2015 中移除增益集 (與增益集管理員)。更別說每個 Visual Studio 版本中提供新的 SDK、 新的擴充性組件和新的 Api。Visual Studio 2017,這項挑戰是更高,因為其新的模組安裝程式,以根據工作負載和個別的元件,並為新版本的 VSIX 部署機制的資訊清單。有些開發人員 (最值得注意的是來自 Microsoft) 發行的每個 Visual Studio 版本不同的新擴充功能,而大部分想發行可以以最寬的 Visual Studio 範圍版本為目標的單一更新擴充功能。

在本文中,我將示範如何完成這項作業。基於此目的,我將焦點放在最常見的案例: 使用命令,封裝的 managed 語言 (C#,在此情況下) 中建立和部署為 VSIX 檔案。

要達成的目標如下所示:

  • 若要使用單一的 Visual Studio 專案建立封裝。
  • 若要使用 Visual Studio 2017 供開發及偵錯。
  • 若要產生單一封裝 DLL 做為組建的結果。
  • 若要將該單一 DLL 放在單一 VSIX 檔案。
  • 若要能夠在 Visual Studio 2017 和許多過去的版本 (2015年、 2013年以此類推) 上安裝的 VSIX 檔案。

由於需要兩個成品 — DLL 檔 (即封裝) 和 VSIX 檔案 (即封裝的部署工具),將分別說明其中每一項:首先,它們如何在安裝或執行的階段。第二個、 如何開發它們。

VSIX 檔案

如先前所述,Visual Studio 2010 導入 VSIX 部署機制,來安裝 Visual Studio 擴充功能,且它已慣用方式曾因為。VSIX 檔案具有副檔名.vsix,可以安裝在不同的方式。如果 VSIX 檔案已發行 Visual Studio Marketplace (先前稱為 Visual Studio 組件庫) 和相容的 Visual Studio 版本與您所使用的版本,您可以使用擴充功能和更新對話方塊安裝。[工具] 功能表中,按一下 [擴充功能和更新,然後移至線上 |Visual Studio Marketplace (請參閱圖 1擴充功能和更新對話方塊視窗中)。

擴充功能和更新對話方塊視窗
圖 1: 擴充功能和更新對話方塊視窗

您也可以按兩下 VSIX 檔案。當發生這種情況時,就會執行 Visual Studio 啟動程式 (C:\Program Files (x86) \common Shared\MSEnv\VSLauncher.exe).vsix 檔案的副檔名相關聯;這會找出 VSIXInstaller.exe 公用程式的最高已安裝 Visual Studio 版本 (最高的版本必須是可以將安裝到所有較低版本)。然後,VSIX 安裝程式會顯示在對話方塊圖 2 VSIX 安裝程式,您可以選取要安裝擴充功能的版本與相容的 Visual Studio 版本。

VSIX 安裝程式
圖 2 VSIX 安裝程式

VSIX 檔案可以安裝以程式設計的方式,也請 VSIXInstaller.exe 公用程式使用其命令列選項,例如的目標 Visual Studio 版本 (2017年、 2015年以此類推) 和版本 (Community、 Professional 和 like)。您可以在 Visual Studio 安裝的 Common7\IDE 子資料夾中找到該公用程式。

在任何情況下,Visual Studio 或 VSIXInstaller.exe 公用程式需要知道哪些 Visual Studio 版本及版支援 VSIX 檔案。透過檔案內的資訊清單檔案,就可以找到該資訊。VSIX 檔案是實際的.zip 檔,因此您可以將.vsix 檔案的副檔名重新命名為.zip,然後開啟它來檢查其內容 (請參閱圖 3 VSIX File3 的內容)。

VSIX 檔案的內容
圖 3 VSIX 檔案內容

如您所見,有數個檔案中:.Dll 檔案的封裝 DLL。.Pkgdef 檔會在安裝期間可讓 Visual Studio 將 DLL 辨識為封裝的 Windows 登錄中加入某些索引鍵。[Content_Types].xml 檔案會描述每個檔案的延伸模組 (.dll、.json 等等) 的內容類型。Visual Studio 2017 所需的 catalog.json 和 manifest.json 檔案。Extension.vsixmanifest 檔案描述的擴充功能、 版本和多個,名稱和它支援哪些 Visual Studio 版本及版。

您可以解壓縮 extension.vsixmanifest 檔案,並開啟以文字編輯器來檢查其內容,將如下所示圖 4的資訊清單的 File4 的內容。

資訊清單檔案的內容
圖 4 資訊清單檔案的內容

如您所見,資訊清單中,狀態 InstallationTarget XML 項目支援的 Visual Studio 版本。在這裡,Microsoft.VisualStudio.Pro 值為目標專業版及更新版本,例如 Premium、 Ultimate、 Enterprise 和任何其他這類版本。請注意,它也為目標的 Community edition 基本上是專業版,但有一些授權限制和不使用某些功能。它也會指出支援 Visual Studio 版本的範圍:10.0 (2010), 11.0 (2012), 12.0 (2013), 14.0 (2015), 15.0 (2017).

安裝的個別使用者擴充功能的 VSIX 檔案時 (由 Visual Studio 或由 VSIX 安裝程式),內部檔案會解壓縮,並複製到這個位置的隨機資料夾:C:\Users\ < 使用者 > \AppData\Local\Microsoft\VisualStudio\ < 版本號碼 > \Extensions\ < 隨機資料夾 >。< 版本號碼 > 可能會附加 「 實驗執行個體 」 (稍後說明),如"Exp 表示"後置字元,而且如 Visual Studio 2017 它也會包含 「 執行個體識別碼 」 的已安裝 Visual Studio。這個執行個體識別碼是隨機產生的 Visual Studio 安裝期間。已將它加入支援的不同版本的 Visual Studio 中,不是之前的項目相同的版本 (2017) 的並存安裝。針對全機器擴充功能,會使用 Common7\IDE\Extensions 的子資料夾。請注意,在任何情況下每個 Visual Studio 版本會使用自己的資料夾其擴充功能。

如果所有的 Visual Studio 版本支援相同的資訊清單格式時,它會很好,而不幸的是,不是這樣。Visual Studio 2010 導入 VSIX 和資訊清單的第一個版本。Visual Studio 2012 引進第 2 版,這是完全不同,並與第 1 版不相容。不過,Visual Studio 2012、 2013年和 2015年-所有支援版本 2 — 仍接受第 1 版的資訊清單中,因此您可以從 Visual Studio 2010 建置版本 1 與目標的 VSIX 檔案,Visual Studio 2015。但是 Visual Studio 2017 支援第 1 版都第 2 版。相反地,它需要資訊清單的第三個版本。幸運的是,第 3 版會使用 PackageManifest XML 項目的 Version 屬性中的值"2.0.0.0",並將只有名為 < 必要條件 > XML 元素 (和兩個新的檔案,catalog.json 和 manifest.json,成 VSIX 檔案)。因此,它會完全與舊版相容的第二個版本,支援的 Visual Studio 2012、 2013年和 2015年 (但不是由 Visual Studio 2010,只支援第 1 版)。這表示,您無法以目標的 Visual Studio 2010 2017年單一 VSIX 檔案。從現在開始,我會放棄 Visual Studio 2010,並將繼續支援 Visual Studio 2012、 2013年、 2015年和 2017年 VSIX 檔案。

封裝 DLL

受管理的 Visual Studio 封裝是包含類別,這個類別繼承自 Microsoft.VisualStudio.Shell.Package 的 DLL。它有助於在建置期間產生.pkgdef 檔 (其中如先前所述,您可以找到內部 VSIX 檔案和擴充功能的安裝資料夾中) 的某些屬性裝飾。.Pkgdef 檔用在啟動 (較舊版本的 Visual Studio),或在安裝期間 (版本 15.3 Visual Studio 2017) 來註冊套件的 DLL,適用於 Visual Studio。一旦註冊,Visual Studio 會嘗試載入在某個時間點,在啟動時,或當其命令的其中一個,就會執行封裝所使用 (這是最佳的作法) 延遲載入封裝。嘗試載入 managed 的 DLL,並初始化套件,在三件事,就可能發生: DLL 會載入的 Common Language Runtime (CLR) 的 Microsoft.NET Framework 版本。它會使用.NET Framework; 提供某些 Dll它會使用某些 Visual Studio 所提供的 Dll。我將輪流檢查每一種。

.NET Framework 是兩件事的總和:CLR + 程式庫 (基底類別和其他程式庫) 中。CLR 執行階段 (JIT 編譯器、 記憶體回收行程等等),而且它會載入 managed 的 Dll。在過去,每個.NET Framework 版本 1.0、 1.1 和 2.0 (供 Visual studio.net 2002年、 Visual studio.net 2003年和 Visual Studio 2005) 會提供自己的 CLR 版本 (1.0、 1.1 和 2.0)。不過,.NET Framework 3.0 和 3.5,使用 Visual Studio 2008,繼續使用完全相同 CLR 2.0 的.NET Framework 2.0,而不是引進一個新。Visual Studio 2010 導入.NET Framework 4 和 CLR 4.0,但因為則所有新的.NET Framework 4.x (雖然交換 「 就地 」 具有回溯相容版本,而非重複使用的確切 CLR 4.0 的.NET Framework 4) 使用 CLR 4.0。因為 Visual Studio 2012 和更新版本的所有使用 CLR 4.0,CLR 版本不發生問題時的擴充功能 DLL 為目標的 Visual Studio 2012、 2013年、 2015年和 2017年。

程式庫會構成.NET Framework; 第二個部分這些是 Visual Studio 專案所參考,並在執行階段使用的 Dll。若要開發的 Visual Studio 的多個版本為目標的單一擴充功能,您必須使用預設安裝最低做為目標的 Visual Studio 版本的最高的.NET Framework。這表示,如果您想要的目標 Visual Studio 2012 和更新版本中,您需要使用.NET Framework 4.5。您無法使用,請說出,因為該版本中引進的任何 DLL,Visual Studio 2013 中,所導入的.NET Framework 4.5.1 會不存在於電腦上使用只有 Visual Studio 2012 安裝。此外,除非您真的需要該 DLL,您不想要強制安裝要使用您的擴充 (它可能會降低銷售或下載和支援) 的.NET Framework 4.5.1 這類使用者。

延伸模組也必須 Visual Studio (通常稱為 Microsoft.VisualStudio.*) 所提供的 Dll。在執行階段,Visual Studio 會尋找其在某些已知位置,例如資料夾 Common7\IDE Common7\IDE\PublicAssemblies 和 Common7\IDE\PrivateAssemblies,及其子資料夾,從全域組件快取 (GAC) 中的 Dll。適用於.NET Framework 4.x C:\Windows\Microsoft.NET\assembly (沒有另一個 GAC,位於 C:\Windows\assembly,但其中一個是針對舊版.NET Framework) 位於 GAC。Visual Studio 2017 使用更加隔離的安裝可避免 GAC 中,而依賴先前所述的資料夾。

有幾個主要原則來開發及產生 VSIX 檔案時,請依照下列:您必須使用您擴充功能的目標提供最低的 Visual Studio 版本的版本。這表示如果您想要的目標 Visual Studio 2012 和更新版本中,您必須只使用組件和擴充性 Api 版本 (或更低) 所提供。如果您的延伸模組會使用 Visual Studio 2013 或更高版本導入的 DLL,擴充功能無法在只有 Visual Studio 2012 的電腦上運作。第二個原則是,延伸模組絕對不要必須部署 Visual Studio 的 Dll 時,兩者都不到位置提到 (Visual Studio 或 GAC 資料夾),也不會對擴充功能的安裝資料夾。Visual Studio 中,這表示 VSIX 檔案不應包含目標會提供這些 Dll。

許多 Visual Studio 的 Dll 版本號碼必須 (8.0...15.0) 中的名稱,例如 Microsoft.VisualStudio.Shell.11.0.dll 或 Microsoft.VisualStudio.Shell.Immutable.10.0.dll。這些說明,來識別 Visual Studio 版本導入,但沒有取得騙: 是名稱,而不是版本。例如,有 Microsoft.Visual.Studio.Shell.11.0.dll 四個版本 (11.0.0.0、 12.0.0.0、 版本為 14.0.0.0 和 15.0.0.0),每個提供,分別由 Visual Studio 版本 (2012年、 2013年、 2015年和 2017年)。前三個 11.0.0.0 以版本為 14.0.0.0 會安裝在 GAC 中對應的 Visual Studio 版本,並已安裝 Visual Studio 2017,所使用的第四個版本 15.0.0.0,Common\IDE\PrivateAssemblies 資料夾中。

因為 Visual Studio 2012 和更新版本為目標的擴充功能必須使用 Visual Studio 組件與 11.0.0.0 版 (稍早所提及的第一個原則),這表示參考 Microsoft.Visual.Studio.Shell.11.0.dll 必須 11.0.0.0 版。不過這是因為未安裝該版本,由 Visual Studio 2013 和更新版本 (它們在啟動 12.0.0.0 版),請和擴充功能不應部署 Visual Studio 的 Dll (第二個原則),嘗試使用該 Visual Studio 的 DLL 時,不會擴充功能失敗? 答案為否,以及它所這點受惠的組件繫結重新導向機制提供的.NET Framework 中,可讓您指定規則 [當項目要求此版本的組件時,使用此較新版本]。 當然,新的版本必須是完全與舊版相容以舊的版本。有幾種方式來重新導向至另一個版本的組件。這是一種方式:可執行檔 (副檔名.exe 檔案) 可以提供伴隨的組態檔 (。.exe.config 檔案延伸模組),指定重新導向。因此,如果您移至您的 Visual Studio 安裝 Common7\IDE 資料夾,您會看到的 Visual Studio 的 devenv.exe 可執行檔和 devenv.exe.config 檔案。如果您使用文字編輯器開啟.config 檔案,您會看到它包含許多組件重新導向:

<dependentAssembly>
  <assemblyIdentity
    name="Microsoft.VisualStudio.Shell.11.0"
    publicKeyToken="b03f5f7f11d50a3a"
    culture="neutral"/>
  <bindingRedirect
    oldVersion="2.0.0.0-14.0.0.0
    newVersion="15.0.0.0"/>
</dependentAssembly>

因此,Visual Studio 2017 (15.0) 具有表示每當有要求舊版本 2.0.0.0 以版本為 14.0.0.0,改為使用新的版本 15.0.0.0 Microsoft.VisualStudio.Shell.11.0 的組件版本重新導向。這是如何在 Visual Studio 2013 或更新版本可以使用擴充功能參考 Microsoft.VisualStudio.Shell.11.0 版本 11.0.0.0,即使它們沒有提供這個版本。

開發擴充功能

您現在知道如何運作在執行階段,您可以開發封裝。若要複習一下,您會建立 VSIX 專案,使用 Visual Studio 2017 使用資訊清單目標的 Visual Studio 版本從 12.0 於 15.0;將包含封裝和命令。它將會使用只參考 11.0.0.0 版 (或更低) 安裝的 Visual Studio 2012。

您可能會懷疑這個時間應該在開發電腦上安裝哪些 Visual Studio 版本。最佳作法是將兩部開發電腦,如下所示:第一,如果您的磁碟上有足夠的空間,安裝所有 Visual Studio 版本 — 2012年、 2013年、 2015年和 2017年。它們可以所有共存並排顯示,您可以在開發期間進行測試。Visual Studio 2017,甚至不同的版本,例如 Community、 Professional 和企業在相同的時間,不可能與舊版本的 Visual Studio 的項目可以同時存在。如果可用空間的問題,安裝舊版本中,最少的元件,或略過某個版本範圍中間之資料 (2013年或 2015年)。

第二個的開發電腦上安裝只有 Visual Studio 2017 或更好的組建伺服器不含 Visual Studio 版本安裝 (只要建置工具 2017),來建置您的擴充功能版本。這種方法將有助於確保您不小心使用的 Dll 或其他相依性從舊版 Visual Studio 安裝資料夾。您也可能會懷疑是否不是安全的作法來開發,或建置包含只有 Visual Studio 2012 的電腦上安裝和答案是不可能:適用於 Visual Studio 2017 (這樣會建立第 3 版的資訊清單,並加入 catalog.json 和 manifest.json 檔案),您需要 Visual Studio SDK 15.0 的 Visual Studio 2017,或使用一些工作,Visual Studio SDK 14.0 的 Visual Studio 2015,請產生 VSIX 檔案。Visual Studio SDK 12.0 的 Visual Studio 2013 和 Visual Studio SDK 11.0 的 Visual Studio 2012 都不可以產生對 Visual Studio 2017 的 VSIX 檔案。

而且 (嚴重) 測試的最佳作法是:使用不同的電腦 (虛擬或雲端) 每個 Visual Studio 版本 (讓您將需要四個測試中隔離的擴充功能在 Visual Studio 2012,Visual Studio 2017 機器)。這個最佳做法,幫助我的程式碼範例中找到錯誤,如這篇文章 !

若要取得 Visual Studio 2017 專案範本,若要建立封裝 (或任何其他類型的擴充功能) 中,您需要 「 Visual Studio 擴充功能開發 「 工作負載。如果您未先安裝它,當您第一次安裝 Visual Studio 2017,移至 C:\Program Files (x86) \Microsoft Visual Studio\Installer 的資料夾、 啟動 vs_Installer.exe、 按一下 [修改] 按鈕並選取該工作負載在清單底部。

建立新的 VSIX 專案,使用 [檔案 |新 |專案] 功能表中。移至 Visual C# |擴充性範本。請確定您已選取 [.NET Framework 4.5; 頂端的下拉式清單然後,選取 [VSIX 專案範本。VSIXProjectVS2012_2017 將專案命名。按兩下以開啟其自訂編輯器 source.extension.vsixmanifest 檔案。在 [中繼資料] 索引標籤中,應設定產品名稱、 作者、 版本,依此類推。在 [安裝目標] 索引標籤中,按一下 [編輯] 按鈕選取 Microsoft.VisualStudio.Pro 識別項 (的值也目標 Community edition,這基本上是專業版),在中所示設定目標安裝範圍,[11.0,15.0],圖 5。方括號表示就會包含值。括號,表示也會排除後的值,因此您也可以設定 [11.0,16.0)。您也可以針對次要版本 (例如 15.3) 使用 (例如 15.0.26208.1) 的組建編號。

安裝目標
圖 5 安裝目標

在 [相依性] 索引標籤中,刪除所有項目。在 [必要條件] 索引標籤中,按一下 [編輯] 按鈕,將您的擴充功能需要最少的 Visual Studio 2017 元件。在此範例中,只有 Visual Studio 核心編輯器是必要的。本節是新的 Visual Studio 2017 和第 3 版資訊清單中,因此它只適用於版本 15.0 (請參閱圖 6 Prerequisites6):

先決條件
圖 6 必要條件

加入 VSIX 專案中的封裝,以滑鼠右鍵按一下 [VSIX 專案節點,在 [方案總管],然後選取 [加入 |新的項目功能表即可啟動 [加入新項目] 對話方塊。現在,移至 Visual Studio C# 項目 |擴充性 |VSPackage] 節點中,選取 Visual Studio Package 範本並將它命名為 MyPackage.cs。將命令加入至封裝重複上一個步驟的動作,但選取目前的自訂命令範本。此 MyCommand1.cs 的名稱。

若要遵循的原則使用 MyPackage.cs 和 MyCommand1.cs,原始程式碼中所需的最少的相依性的移除未使用 (灰色) 命名空間。以滑鼠右鍵按一下 [VSIX 專案節點,在 [方案總管],然後按一下 [管理 NuGet 封裝,為方案項目。在已安裝] 區段中,解除安裝如下所示的順序中的所有封裝:

Microsoft.VisualStudio.Shell.15.0
Microsoft.VisualStudio.Shell.Framework
Microsoft.VisualStudio.CoreUtility
Microsoft.VisualStudio.Imaging
Microsoft.VisualStudio.Shell.Interop.12.0
Microsoft.VisualStudio.Shell.Interop.11.0
Microsoft.VisualStudio.Shell.Interop.10.0
Microsoft.VisualStudio.Threading
Microsoft.VisualStudio.Shell.Interop.9.0
Microsoft.VisualStudio.Shell.Interop.8.0
Microsoft.VisualStudio.TextManager.Interop.8.0
Microsoft.VisualStudio.Shell.Interop
Microsoft.VisualStudio.TextManager.Interop
Microsoft.VisualStudio.Validation
Microsoft.VisualStudio.Utilities
Microsoft.VisualStudio.OLE.Interop

(不 Microsoft.VSSDK.BuildTools 解除封裝的安裝,也就是 Visual Studio SDK。)

在專案的參考節點在 [方案總管] 中,解除安裝系統和 System.Design 以外的所有其餘參考 (也就不會以 NuGet 套件取得)。現在您可以重建方案。就會發生編譯錯誤會加入顯示參考解決圖 7

圖 7 的 Visual Studio 2012 參考

組件名稱 組件版本 Visual Studio 2012 SDK 子資料夾
Microsoft.VisualStudio.OLE.Interop 7.1.40304.0 v2.0
Microsoft.VisualStudio.Shell.Interop 7.1.40304.0 v2.0
Microsoft.VisualStudio.Shell.Interop.8.0 8.0.0.0 v2.0
Microsoft.VisualStudio.Shell.Interop.9.0 9.0.0.0 v2.0
Microsoft.VisualStudio.Shell.Interop.10.0 10.0.0.0 v2.0
Microsoft.VisualStudio.Shell.Immutable.10.0 10.0.0.0 v4.0
Microsoft.VisualStudio.Shell.11.0 11.0.0.0 v4.0

不幸的是,Microsoft 不會提供正式的 NuGet 封裝 Microsoft.VisualStudio.Shell.11.0 (您可以找到非官方 NuGet VSSDK。Shell.11 封裝,但是)。如果您有安裝 Visual Studio 2012 (您應是最小支援版本,您的擴充功能),您可以從取得 GAC 稍早所述。或者,您可以取得所有必要的組件安裝 Visual Studio 2012 SDK (bit.ly/2rnGsfq) 中的子資料夾 v2.0 和 v4.0 的資料夾 C:\Program Files (x86) \Microsoft Visual Studio 11.0\VSSDK\VisualStudioIntegration\Common\Assemblies 提供它們。資料表的最後一欄會顯示子資料夾的 Visual Studio 2012 SDK,您可以在哪裡找到每個組件。

若要避免上非官方 NuGet 封裝,或在特定的本機資料夾 (無論是從 Visual Studio SDK,或從 Visual Studio 安裝) 的相依性,最好的方法是無論在何處取得從組件,並建立名為 VS2012Assemblies 專案的根資料夾下的資料夾。然後,將 Dll 複製到該資料夾、 參考它們從該處 (使用專案的 [參考管理員] 對話方塊的 [瀏覽] 按鈕) 和加入原始程式碼控制,確保 Dll,會新增至它的 VS2012Assemblies 資料夾 (通常原始程式碼控制工具不要將 Dll 加入預設)。因此,從這一點,需要 Visual Studio 組件是原始碼的一部分。

若要遵循的原則不包括組件參考,在 VSIX 檔案,甚至不能在輸出資料夾中,選取每個參考,並在 [屬性] 視窗中確認 [複製本機屬性設定為 False。此時可以重建解決方案不會發生錯誤。使用 Windows 檔案總管,請移至輸出資料夾。只有這些檔案應該會產生: extension.vsixmanifest,VSIXProjectVS2012_2017.dll,VSIXProjectVS2012_2017.pkgdef 和 VSIXProjectVS2012_2017.vsix。

當您建置專案時,MSBuild 目標的其中一個會將擴充功能部署至 Visual Studio 的實驗執行個體中。這是 Visual Studio 會使用不同的資料夾和登錄項目,比標準的執行個體,執行個體,讓您不正常的執行個體無法使用在開發期間發生問題時您的擴充問題。(您一律可以重設實驗執行個體,再按一下 Windows [開始] 按鈕,輸入 「 重設 」 和執行 「 重設 Visual Studio 2017 實驗執行個體 」 命令。) 如果您在專案的 [內容] 頁面移至 [偵錯] 索引標籤,您可以設定 Visual Studio 2017 devenv.exe 檔案的 [啟動外部程式] 欄位。(它是要變更此資料庫,如果升級,因為它會指向較舊版本的 Visual Studio。) 您也可以查看命令列引數,指定的根尾碼"Exp 表示"(請參閱圖 8偵錯實驗 Instance8),如此實驗執行個體也會用於偵錯。

偵錯的實驗執行個體
圖 8 偵錯的實驗執行個體

按一下 [偵錯 |開始偵錯] 功能表項目和新的 Visual Studio 執行個體將會啟動 (請注意其標題表示 「 實驗執行個體 」)。如果您按一下 [工具] |叫用 MyCommand1 功能表項目、 封裝將載入、 將執行命令和訊息方塊會顯示。

如果您想要使用 Visual Studio 2017 偵錯舊版的 Visual Studio 擴充功能,您需要進行兩項變更:首先,因為建置延伸模組之後會將它部署至 Visual Studio 的實驗執行個體的 SDK 已用來建置專案的版本,您要移除的 NuGet 套件 Microsoft.VSSDK.BuildTools 版本 15.0 和使用 Visual Studio 2013 的 Visual Studio 2015 或 12.0 版版本 14.0。Visual Studio 2012 沒有 VSDK 的 NuGet 套件,您要編輯.csproj 檔案和 VSToolsPath 變數指向的位置 VSSDK 11.0 (C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0),您必須個別安裝。其次,您必須移至 [偵錯] 索引標籤,在專案 [屬性] 頁面上,並將 [啟動外部程式] 欄位設定為符合 Common7\IDE\devenv.exe 可執行檔。

您可能知道許多 Visual Studio 專案支援反覆存取。也就是說,它們可以開啟和偵錯的數個 Visual Studio 版本,而不致使修改。這不是使用 「 現成。 「 擴充性專案的情況下 使用 MSBuild 和 Visual Studio Sdk 的一些主控,您可能會達到,不過,它一律是很難解釋的方法。

一旦您完成開發和偵錯,您還可以建置延伸模組,在發行組態及測試在 Visual Studio 版本安裝在測試電腦上的外掛式執行個體上。如果一切順利,就可以發佈您在 Visual Studio Marketplace 上的擴充功能 !          


Carlos Quintero收到 Microsoft 最有價值專家深獲肯定 14 次,目前的 Visual Studio 和開發技術,類別目錄中。已幫助他建立延伸模組,適用於 Visual Studio 2002 中,自資訊,請參閱部落格自 2006 在其他開發人員visualstudioextensibility.com和其他資訊,請參閱最近 tweeting: @VSExtensibility

這點受惠檢閱本文章下列技術專家:Justin Clareburt、 Alex Eyler 和 Mads Kristensen


MSDN Magazine 論壇中的這篇文章的討論