每個 Windows SDK 版本都會新增功能,你可能會想利用這些功能。 然而,並非所有客戶都會同時更新裝置到最新版本的 Windows。 你希望你的應用程式能在最廣泛的裝置上運作,同時在新功能可用時善用。
請遵循以下三個步驟,以支援最廣泛的 Windows 裝置:
- 設定你的 Visual Studio 專案以鎖定最新的 API。 這會影響編譯器在建置時能存取的內容。
- 執行執行時檢查,確保你只呼叫應用程式運行裝置上存在的 API。
- 在最低版本和目標版的 Windows 上測試你的應用程式。
設定你的 Visual Studio 專案
支援多個 Windows 版本的第一步,是在你的 Visual Studio 專案中指定目標版本和最低支援的作業系統/SDK 版本。
- Target — Visual Studio 用來編譯應用程式程式碼的 SDK 版本。 此 SDK 版本中的所有 API 和資源在編譯時都已包含在你的應用程式程式碼中。
- 最低限度 — 支援你應用程式能運行的最早作業系統版本的 SDK 版本。
執行時,你的應用程式會針對它部署的作業系統版本執行。 如果你使用該版本沒有的 API,應用程式會拋出例外。 使用執行時檢查來呼叫正確的 API,如本文後面所述。
Tip
Visual Studio 不會警告你 API 相容性。 你有責任測試並驗證你的應用程式在所有作業系統版本(介於最低版和目標版)上都能正常運作。
當你在 Visual Studio 建立新專案時,設定你的應用程式支援的目標和最低版本。 預設情況下,目標版本是安裝量最高的 SDK 版本,最低版本則是安裝量最低的 SDK。
若要更改現有 project 的最低與目標版本,請至 ProjectProperties>>應用程式>目標設定。
執行 API 檢查
版本自適應應用程式的關鍵在於結合 API 合約與 ApiInformation 類別。 這個類別讓你能偵測是否有指定的 API 合約、類型或成員存在,讓你能安全地在各種裝置和作業系統版本間呼叫 API。
API 合約
裝置家族中的 API 集合會細分為稱為 API 合約的細分。 使用該 ApiInformation.IsApiContractPresent 方法來測試是否有 API 合約。 當你想測試多個存在於同一版本 API 合約中的 API 時,這很有用。
bool isScannerContractPresent =
Windows.Foundation.Metadata.ApiInformation.IsApiContractPresent(
"Windows.Devices.Scanners.ScannerDeviceContract", 1);
API 合約代表一項功能——一組相關的 API,共同提供特定功能。 一個在 API 合約中實作任何 API 的平台,必須實作該合約中的每一個 API。 只要對該契約測試一次,就能安全地呼叫其任何 API。
最大且最常用的合約是 Windows.Foundation.UniversalApiContract,它包含了大多數 Windows 執行階段 API。 有關可用合約清單,請參見 裝置家族擴充 SDK 與 API 合約。
版本自適應程式碼與條件式 XAML
在程式碼的條件式中使用 ApiInformation 類別,以在呼叫 API 之前測試該 API 是否存在。 像 IsTypePresent、IsEventPresent、IsMethodPresent 和 IsPropertyPresent 等方法,讓你能以所需的粒度進行測試。
欲了解更多資訊與範例,請參閱 版本自適應程式碼。
如果你的應用程式最低版本是 17763(版本 1809)或更新版本,你可以使用 條件式 XAML 設定屬性,並在不依賴程式碼的情況下以標記方式實例化物件。 條件式 XAML 提供了直接在 ApiInformation.IsApiContractPresent 標記中使用的方式。
欲了解更多資訊與範例,請參閱 條件式 XAML。
測試您的版本適應性應用程式
當你使用版本自適應程式碼或條件式 XAML 時,請在執行最低版本的裝置和執行目標版 Windows 的裝置上測試你的應用程式。
你不可能在單一裝置上測試所有條件碼路徑。 部署並測試應用程式在遠端裝置(或虛擬機)上,執行最低支援的作業系統版本,以確保所有程式碼路徑都能正常運作。