版本調適型應用程式

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

請遵循以下三個步驟,以支援最廣泛的 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 是否存在。 像 IsTypePresentIsEventPresentIsMethodPresentIsPropertyPresent 等方法,讓你能以所需的粒度進行測試。

欲了解更多資訊與範例,請參閱 版本自適應程式碼

如果你的應用程式最低版本是 17763(版本 1809)或更新版本,你可以使用 條件式 XAML 設定屬性,並在不依賴程式碼的情況下以標記方式實例化物件。 條件式 XAML 提供了直接在 ApiInformation.IsApiContractPresent 標記中使用的方式。

欲了解更多資訊與範例,請參閱 條件式 XAML

測試您的版本適應性應用程式

當你使用版本自適應程式碼或條件式 XAML 時,請在執行最低版本的裝置和執行目標版 Windows 的裝置上測試你的應用程式。

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