預覽 API
.NET 平台會認真對待相容性。 因此,程式庫生態系統通常會避免進行破壞性更改,特別是在 API 方面。
不過,在設計 API 時,請務必能夠收集使用者的意見反應,並視需要根據該意見反應對 API 進行變更。 為了避免意外,您應該瞭解您使用的 API 會被視為穩定,以及哪些 API 仍在使用中開發中,而且可能會變更。
API 有多種方式可以表示其為預覽格式:
如果元件公開,則整個元件會被視為預覽:
- 在 .NET 執行環境的預覽版本中。
- 在發行前版本 NuGet 套件中。
否則穩定的元件會使用下列屬性將特定 API 標示為預覽:
本文說明每個選項的運作方式,以及針對連結庫開發人員,如何在這些選項之間進行選擇。
.NET 運行時間預覽
除了具有上線授權的釋出候選版本(RC)之外,不支援 .NET 執行階段和 SDK 的預覽版本。
因此,根據預覽收到的意見反應,新增為 .NET 預覽一部分的任何 API 都會被視為可能會變更。 若要使用 .NET 運行時間預覽,您必須在專案中明確以較新的架構版本為目標。 如此一來,您就會隱含表示同意,以取用可能會變更的 API。
發行前版本 NuGet 套件
NuGet 套件可以是穩定或 預發行版本。 發行前版本的套件會在其版本號上附加發行前版本後綴以作標示。 例如,System.Text.Json 9.0.0-preview.2.24128.5
的發行前版本後綴為 preview.2.24128.5
。
發行前版本套件通常用來收集早期採用者的意見反應。 作者通常不支持它們。
當您透過 CLI 或 UI 安裝套件時,必須明確指出是否要安裝發行前版本。 如此一來,您就會隱含表示同意,以取用可能會變更的 API。
RequiresPreviewFeaturesAttribute
RequiresPreviewFeaturesAttribute 屬性用於需要跨各層預覽行為的 API,包括執行時間、C# 編譯器和程式庫。 當您取用這個屬性標示的 API 時,除非專案檔包含 屬性 <EnablePreviewFeatures>true</EnablePreviewFeatures>
,否則會收到建置錯誤。 將此屬性設定為 true
也會設定 <LangVersion>Preview</LangVersion>
,以允許使用預覽語言功能。
例如,在 .NET 6 中,泛型數學 連結庫標示為 RequiresPreviewFeaturesAttribute,因為它需要當時處於預覽狀態的靜態介面成員。
ExperimentalAttribute
.NET 8 已新增 ExperimentalAttribute,它不需要任何運行時間或語言預覽功能,而且只會指出指定的 API 尚未穩定。
針對實驗 API 建置時,編譯程式會產生錯誤。 標示為實驗性的每個功能都有自己的個別診斷標識碼。 若要表示同意使用實驗 API,請隱藏特定的診斷。 您可以透過任何隱藏診斷的方法來執行此動作,但建議的方法是將診斷新增至專案的 <NoWarn>
屬性。
由於每個實驗性功能都有個別的標識碼,因此同意使用一個實驗性功能並不同意使用另一個功能。
如需詳細資訊,請參閱 實驗性功能 和 C# 指南中的文章,一般屬性。
程式庫開發人員的指引
連結庫開發人員通常應該以下列兩種方式之一來表示 API 處於預覽狀態:
- 針對 發行前版本 套件中引進的新 API,您不需要執行任何動作;套件已經表示預覽品質。
- 如果您想要寄送包含某些預覽品質 API 的穩定套件,您應該使用
[Experimental]
標記這些 API。 請務必使用 您自己的診斷標識碼,並使其專屬於這些功能。 如果您有多個獨立功能,請考慮使用多個標識符。
[RequiresPreviewFeatures]
屬性僅適用於 .NET 平臺本身的元件。 即便如此,它也只會用於需要運行時間和語言預覽功能的 API。 如果這隻是處於預覽狀態的 API,.NET 平臺會使用 [Experimental]
屬性。
此規則的例外是,如果您正在建置穩定的程式庫,並希望暴露某些特定功能,而這些功能則依賴於運行時間或語言預覽行為。 在這種情況下,您應該使用 [RequiresPreviewFeatures]
作為該功能的進入點。 不過,您必須考慮這類 API 的使用者也必須啟用預覽功能,這樣會讓他們暴露在所有運行時、庫和語言的預覽行為中。