版本調適型應用程式

每個 Windows SDK 版本都會新增功能,你可能會想利用這些功能。 然而,並非所有客戶都會同時更新裝置到最新版本的 Windows。 你希望你的應用程式能在最廣泛的裝置上運作,同時在新功能可用時善用。

先決條件

  • Windows 應用程式 SDK 1.0 或更新版本
  • Visual Studio 2022 或更新版本搭配 Windows 應用程式開發工作負載

Overview

請遵循以下三個步驟,以支援最廣泛的 Windows 裝置:

  1. 設定你的 Visual Studio 專案以鎖定最新的 API。 這會影響編譯器在建置時能存取的內容。
  2. 執行執行時檢查,確保你只呼叫應用程式運行裝置上存在的 API。
  3. 在最低版本和目標版的 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 的裝置上測試你的應用程式。

你不可能在單一裝置上測試所有條件碼路徑。 部署並測試應用程式在遠端裝置(或虛擬機)上,執行最低支援的作業系統版本,以確保所有程式碼路徑都能正常運作。