共用方式為


VisualStudio.Extensibility Extensions 的 .NET 兼容性

新的 VisualStudio.Extensibilty 模型可讓延伸模組在個別的 .NET 主機進程中,於主要 Visual Studio 進程外執行。 因為 .NET 被用作執行階段來執行 VisualStudio.Extensibility 擴充模組,因此使用 VisualStudio.Extensibility 框架建置的擴充模組必須與公開支援的 .NET 長期維護(LTS)執行階段保持最新。

.NET 運行時間支援模型

.NET 運行時間有自己的存留期和服務時程表,與 Visual Studio 無關。 目前的節奏是每年都會發佈新的 .NET 版本,其中奇數的主要版本提供 18 個月的支援期,而偶數編號的版本提供長達 36 個月的長期支援(LTS)。 在任何情況下,Visual Studio 都會包含仍在公開支援的 .NET LTS 版本。 如需 .NET 運行時間及其存留期的官方清單,請參閱這裡

下列時間表展示 Visual Studio 隨附的不同 .NET 版本概略。

.NET 運行時間時間軸的螢幕快照。

根據預設,VisualStudio.Extensibility 延伸模組會以任何最舊支援的 .NET LTS 運行時間為目標。 不過,擴充功能開發人員可以在其延伸模組元數據中指定其延伸模組支援的 .NET 版本。 鑒於這項資訊,Visual Studio 會根據延伸模組的宣告 .NET 運行時間版本及其已知的生命週期結束日期,選擇適當的目標。

請務必注意,使用 VisualStudio.Extensibility 的開發人員應該以目前的 .NET SDK 為目標。 如果延伸模組是針對不再公開支援的 .NET 版本所開發,因此不再隨附於Visual Studio,則Visual Studio 會選擇最舊的公開支援運行時間來執行延伸模組。 雖然主要 .NET 版本之間的中斷性變更影響的可能性很低,但並不保證在舊版 .NET 版本上執行的應用程式可以運作較新的版本,因此無法保證延伸模組能夠運作。

經驗

用戶體驗

Visual Studio 會根據其宣告支援的 .NET 版本和 Visual Studio 可用的 .NET 版本,選擇要用於延伸模組的 .NET 運行時間。 使用者只有在兩種情況下會注意到與目前體驗的差異:

  • 如果延伸模組僅支援接近生命周期結束的 .NET 版本,擴充功能管理員視窗中的延伸模組磚上會顯示信息圖示,告知使用者延伸模組有不受支持的危險。
  • 如果延伸模組僅支援已過終止支持的 .NET 版本,擴充功能管理員視窗中的擴充功能磚上會顯示警告圖示,以告知使用者該擴充功能是在尚未明確支持的 .NET 版本上盡力執行,並且可能無法正常運行。

具有不同 .NET 運行時間組態的延伸模塊螢幕快照。

在這兩種情況下,用戶都應該連絡擴充功能開發人員,並要求他們確保延伸模組可在支援的 .NET LTS 版本上運作,併發佈更新的延伸模組。

開發人員體驗 - 偵錯

對於 VisualStudio.Extensibility 擴充功能的開發人員,F5 偵錯體驗已更新,允許在偵錯或測試擴充功能時選擇 .NET 執行階段。 此體驗的目標是要協助在不同 .NET 運行時間上對VisualStudio.Extensibility擴充性延伸模組進行相容性測試。

現在,當選取的啟動專案是 VisualStudio.Extensibility 專案時,[偵錯] 功能表的下拉式清單中會多了一個選項,其中列出 Visual Studio 隨附的 .NET 執行階段列表。 在所選運行時間下偵錯擴充功能,可確保偵錯的擴充功能會在選取的運行時間上執行。 在實驗實例中,[延伸模組管理員] 工具視窗中的延伸模組圖格會顯示實驗室圖示,並指定要評估的 .NET 版本。 在下列螢幕快照中,可以看到 Command Sample 延伸套件的示範。

請注意,此範例情境是一個虛構的情境,其中Visual Studio包含.NET 6和.NET 8。 在實際版本中,只有支援的 .NET LTS 版本會隨附於Visual Studio中。

設定 F5 偵錯運行時間目標的螢幕快照。 F5 偵錯期間延伸模組管理員的螢幕快照。

開發人員體驗 - 擴充功能組態

DotnetTargetVersions 上有選擇性的 ExtensionConfiguration 欄位可供開發人員指定其延伸模組能夠鎖定的一或多個 .NET 運行時間。 此欄位使用目標框架識別碼清單,例如 net8.0netstandard2.0。 如果提供,這項資訊可讓 Visual Studio 判斷應該用來執行延伸模組的運行時間。 如果欄位保留空白,則會將 Visual Studio 隨附的較舊公開支援運行時間設定為預設值。

如果在擴充項目檔中設定的目標 Framework 的 Moniker <TargetFrameworks> 屬性與 ExtensionConfiguration中宣告或省略的目標 Framework 的 Moniker 不一致,VisualStudio.Extensibility 分析器將會發出警告。 如果 ExtensionConfiguration中未指定任何目標,而 <TargetFrameworks> 中的任何名稱與所選預設值不相容,就會引發警告。 如果在 ExtensionConfiguration中指定目標,則如果 <TargetFrameworks> 中指定的任何識別符與提供的值不相容,就會引發警告。

例如,如果擴充功能建置以 netstandard2.0為目標,則它與任何 .NET 版本相容。 不過,如果開發人員將 DotnetTargetVersions 留空,而選擇 net8.0 做為預設值,那麼如果擴充功能建置以 net6.0 為目標時將觸發警告。

下圖顯示以 .NET 8 為目標建置的延伸模塊範例,但在 DotnetTargetVersions中指定了 .NET 6。

設定為在 .NET 6 上執行的延伸模組程序代碼螢幕快照。 目標 .NET 運行時間不支援的延伸模組建置警告螢幕快照。

測試 & 早期存取

如果您要嘗試使用多個 .NET 執行時間來管理延伸模組,請參閱 VSExtensibility 存放庫中所包含的腳稿,。 包含的腳本可讓您使用 .NET 9 更新任何 Visual Studio 實例。 請注意,.NET 9 不是 .NET 的 LTS 版本,而且這 不是一個受支援的案例,但會提供未來在多個 .NET 執行階段上開發 VisualStudio.Extensibility 擴充功能的體驗範例。