Microsoft Windows App SDK 1.0 穩定版發布,可供下載(發行說明)

閱讀時間圖標 12分鐘讀


讀者幫助支持 MSpoweruser。如果您透過我們的連結購買,我們可能會獲得佣金。 工具提示圖標

請閱讀我們的揭露頁面,了解如何幫助 MSPoweruser 維持編輯團隊的發展 阅读更多

用戶界面

經過幾次預覽版之後,微軟剛剛發布了 Windows App SDK 1.0.0 Stable,這是一個工具包,使桌面應用程序開發人員能夠構建具有現代 Windows UI、API 和平台功能的應用程序。

在此版本中,Microsoft 添加了 Windows App SDK 0.8 中的多項新功能,並穩定了 1.0 預覽版中的問題。

[lwptoc title=”WindowsAppSDK 1.0 Stable” width=”30%” float=”right”]

用戶界面 3

WinUI 3 是 Windows App SDK 的本機用戶體驗 (UX) 框架。

新功能和更新:

  • Microsoft 添加了新控件(PipsPager、Expander、BreadcrumbBar)並更新了現有控件以反映最新的 Windows 樣式 用戶界面 2.6.
  • 通過使用“Blank App, Packaged...”模板創建新應用程序,WinUI 支持單項目 MSIX 打包。
  • Microsoft 現在支持在 Windows 3 及更高版本上部署沒有 MSIX 打包的 WinUI 1809 應用程序。 請查看 創建一個 WinUI 3 未打包的桌面應用程序 了解更多信息。
  • WinUI 3 項目現在可以將其目標版本設置為 Windows 10 版本 1809。以前,它們只能設置為版本 1903。
  • Visual Studio 2022 Preview 5 和 GA 支持用於 WinUI 打包應用的應用內工具欄、熱重載和 Live Visual Tree。

重要限制:

  • 已知的問題 打包和未打包的 WinUI 應用程序:
    • 引用 C++ Windows 運行時組件的 C++ 應用程序中的運行時錯誤: 要解決此問題,請將以下目標添加到 Windows 運行時組件的 .vcxproj 末尾:

      XML的

      <Target Name="GetPriIndexName">
      <PropertyGroup>
          <!-- Winmd library targets use the default root namespace of the project for the App package name -->
          <PriIndexName Condition="'$(RootNamespace)' != ''">$(RootNamespace)</PriIndexName>
          <!-- If RootNamespace is empty fall back to TargetName -->
          <PriIndexName Condition="$(PriIndexName) == ''">$(TargetName)</PriIndexName>
      </PropertyGroup>
      </Target>
      
  • 已知的問題 帶有單項目 MSIX 的 WinUI 應用程序 (空白應用,打包模板):
    • 在重新啟動 Visual Studio 之前,缺少 Package & Publish 菜單項: 在 Visual Studio 2019 和 Visual Studio 2022 中使用空白應用打包(桌面中的 WinUI 3)項目模板創建具有單項目 MSIX 的新應用時,發布項目的命令不會出現在菜單中,直到您關閉並重新打開 Visual Studio。
    • 如果沒有安裝“C++ (v14x) Universal Windows Platform Tools”可選組件,帶有單項目 MSIX 的 AC# 應用將無法編譯。 看法 安裝開發者工具 了解更多信息。
    • 使用在引用的 Windows 運行時組件中定義的類型的單項目 MSIX 應用中的潛在運行時錯誤: 要解決,手動添加 可激活的類條目 到 appxmanifest.xml。
      • C# 應用程序中的預期錯誤是“COMException:未註冊類 (0x80040154 (REGDB_E_CLASSNOTREG))。
      • C++/WinRT 應用程序中的預期錯誤是“winrt::hresult_class_not_registered”。
  • 已知的問題 沒有 MSIX 打包的 WinUI 應用程序 (未打包的應用程序):
  • 已知的問題 打包和部署 WinUI 應用程序:
    •  Package 具有單項目 MSIX(空白應用程序,打包模板)的 WinUI 應用程序不支持命令。 相反,使用 Package & Publish 命令來創建一個 MSIX 包。
    • 使用 C# 類庫創建 NuGet 包 Pack 命令,確保活動 Configuration is Release.
    •  Pack C++ Windows 運行時組件不支持使用命令創建 NuGet 包。

加窗

Windows 應用 SDK 提供了一個 應用窗口 該類改進了以前易於使用的 Windows.UI.WindowManagement.AppWindow 預覽類,並使其可用於所有 Windows 應用程序,包括 Win32、WPF 和 WinForms。

新功能

  • 應用窗口 是一個高級窗口化 API,它允許易於使用的窗口化場景與 Windows 用戶體驗和其他應用程序很好地集成。 表示應用程序內容的系統管理容器的高級抽象。 這是託管內容的容器,代表用戶在屏幕上調整大小和移動應用程序時與之交互的實體。 對於熟悉 Win32 的開發人員來說,AppWindow 可以看作是 HWND 的高級抽象。
  • 顯示區域 表示 HMONITOR 的高級抽象,遵循與 AppWindow 相同的原則。
  • 顯示區域觀察器 允許開發人員觀察顯示拓撲的變化並枚舉系統中當前定義的 DisplayArea。

輸入

這些是支持 WinUI 並為開發人員提供較低級別的 API 表面以實現更高級輸入交互的輸入 API。

新功能

重要限制

  • 全部 指針點 靜態工廠函數已被刪除: 獲取當前點獲取當前點轉換獲取中級點和 獲取中間點轉換.
  • Windows 應用 SDK 不支持檢索 指針點 具有指針 ID 的對象。 相反,您可以使用 指針點 成員函數 獲取轉換點 檢索現有的轉換版本 指針點 目的。 對於中間點,您可以使用 指針事件參數 成員功能 獲取中級點 和 獲取轉換中間點.
  • 直接使用平台SDK API Windows.UI.Core.CoreDragOperation 不適用於 WinUI 應用程序。
  • 指針點 性能 原始位置 和 聯繫RectRaw 被刪除是因為它們引用了非預測值,這些值與操作系統中的正常值相同。 利用 位置 和 接觸矩形 反而。 指針預測現在用 Microsoft.UI.Input.PointerPredictor API 對象。

應用生命週期

大多數應用生命週期功能已經存在於 UWP 平台中,並且已被引入 Windows 應用 SDK 以供桌面應用類型使用,尤其是未打包的控制台應用、Win32 應用、Windows 窗體應用和 WPF 應用。 這些功能的 Windows 應用 SDK 實現不能在 UWP 應用中使用,因為 UWP 平臺本身俱有等效功能。

 重要

如果你正在開發 UWP 應用,請參閱 UWP 遷移指南 了解有關將應用遷移到 Windows App SDK 的更多信息。

非 UWP 應用也可以打包到 MSIX 包中。 雖然這些應用程序可以使用某些 Windows 應用程序 SDK 應用程序生命週期功能,但它們必須在可用的情況下使用清單方法。 例如,他們不能使用 Windows App SDK 註冊ForXXXActivation API 並且必須改為通過清單註冊豐富的激活。

打包應用程序的所有約束也適用於打包的 WinUI 應用程序,還有如下所述的其他注意事項。

重要注意事項:

  • 豐富的激活: 獲取激活事件參數
  • 註冊/取消註冊豐富的激活
    • 未打包的應用程序: 完全可用。
    • 打包的應用程序:不可用,請改用應用的 MSIX 清單。
    • 有關更多信息,請參見 豐富的激活.
  • 單/多實例
    • 未打包的應用程序: 完全可用。
    • 打包的應用程序: 完全可用。
    • WinUI 應用程序:如果應用程序想要檢測其他實例並重定向激活,它必須儘早這樣做,並且在初始化任何窗口等之前。要啟用此功能,應用程序必須定義 DISABLE_XAML_GENERATED_MAIN,並編寫自定義 Main (C#) 或WinMain (C++) 可以進行檢測和重定向。
    • 重定向激活到異步 是異步調用,如果您的應用在 STA 中運行,則不應等待異步調用。 對於 Windows 窗體和 C# WinUI 應用程序,如有必要,您可以將 Main 聲明為異步。 對於 C++ WinUI 和 C# WPF 應用程序,您不能將 Main 聲明為異步,因此您需要將重定向調用移動到另一個線程以確保您不會阻塞 STA。
    • 有關更多信息,請參見 應用實例化.
  • 電源/狀態通知
    • 未打包的應用程序: 完全可用。
    • 打包的應用程序: 完全可用。
    • 有關更多信息,請參見 電源管理.

已知問題:

  • 設置動詞處理程序的命令行模板時,文件類型關聯錯誤地將 %1 編碼為 %251,這會導致未打包的 Win32 應用程序崩潰。 作為部分解決方法,您可以手動將註冊表值編輯為 %1。 如果目標文件路徑中有空格,那麼它仍然會失敗,並且沒有針對該場景的解決方法。
  • 這些單/多實例錯誤將在即將發布的服務補丁中修復:
    • 為 x86 編譯時,AppInstance 重定向不起作用
    • 註冊密鑰、取消註冊並重新註冊會導致應用程序崩潰

寫核心

DWriteCore 是 Windows App SDK 的實現 直寫,它是用於高質量文本渲染、與分辨率無關的輪廓字體以及完整的 Unicode 文本和佈局支持的 DirectX API。 DWriteCore 是 DirectWrite 的一種形式,可在 Windows 版本低至 Windows 10 版本 1809(10.0;Build 17763)上運行,並為您跨平台使用它打開了大門。

功能 DWriteCore 包含 DirectWrite 的所有功能,但有一些例外。

重要限制

  • DWriteCore 不包含以下 DirectWrite 功能:
    • 每會話字體
    • 最終用戶定義字符 (EUDC) 字體
    • 字體流 API
  • 低級渲染 API 支持是部分的。
  • DWriteCore 不與 Direct2D 互操作,但您可以使用 IDWriteGlyphRun分析 和 IDWriteBitmapRenderTarget.

捷運核心

MRT Core 是現代 Windows 的精簡版 資源管理系統 它作為 Windows 應用 SDK 的一部分分發。

重要限制

  • 在 .NET 項目中,如果應用程序已構建,則復制粘貼到項目文件夾中的資源文件不會在 F5 上建立索引。 作為一種解決方法,重建應用程序。 看 問題1503 獲取更多信息。
  • 在 .NET 項目中,當使用 Visual Studio UI 將資源文件添加到項目中時,默認情況下這些文件可能不會被索引。 看 問題1786 了解更多信息。 要解決此問題,請刪除 CSPROJ 文件中的以下條目:

    XML的

    <ItemGroup>
        <Content Remove="<image file name>" />
    </ItemGroup>
    <ItemGroup>
        <PRIResource Remove="<resw file name>" />
    </ItemGroup>
    
  • 對於未打包的 C++ WinUI 應用程序,資源 URI 未正確構建。 要解決此問題,請在 vcxproj 中添加以下內容:

    XML的

    <!-- Add the following after <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> -->
    
    <PropertyGroup>
        <AppxPriInitialPath></AppxPriInitialPath>   
    </PropertyGroup>
    

部署

新功能和更新

  • 您可以通過 WindowsPackageType project 屬性以加載 Windows App SDK 運行時並調用 Windows App SDK API。 看 創建 WinUI 3 應用程序 作為指示。
  • 未打包的應用程序可以通過集成到獨立的 Windows App SDK 中來部署 Windows App SDK .exe 安裝程序到您現有的 MSI 或安裝程序。 有關詳細信息,請參閱 適用於未打包應用的 Windows 應用 SDK 部署指南.
  • 未打包的 .NET 應用程序也可以使用 .NET 包裝器 引導程序 API 在運行時動態獲取對 Windows App SDK 框架包的依賴。 有關 .NET 包裝器的詳細信息,請參閱 .NET 包裝庫.
  • 打包的應用程序可以使用部署 API 來驗證並確保機器上安裝了所有必需的包。 有關部署 API 如何工作的詳細信息,請參閱 打包應用部署指南.

重要限制

  • 引導程序 API 的 .NET 包裝器僅供未打包的 .NET 應用程序使用,以簡化對 Windows App SDK 的訪問。
  • 僅 MSIX 打包的應用程序完全受信任或具有 包管理 受限能力有權使用部署 API 安裝主包和單例包依賴項。 對部分信任打包應用程序的支持將在以後的版本中提供。
  • 當 F5 測試使用 部署管理器.初始化 x64 系統上的方法,確保首先通過運行 Windows應用程序運行時安裝.exe. 否則你會遇到一個 未找到 由於 Visual Studio 未部署 x64 框架而導致的錯誤,這通常通過商店部署或旁加載發生。

其他限制和已知問題

  • 不支持任何 CPU 構建配置: 什麼時候 添加 Windows 應用 SDK 到支持的現有 .NET 應用程序或組件 任何 CPU,您必須指定所需的架構: x86x64 or arm64.
  • 從 .NET 5 升級到 .NET 6:在 Visual Studio UI 中升級時,您可能會遇到構建錯誤。 作為一種解決方法,手動將項目文件的 TargetFrameworkPackage 更新為以下內容:

    XML的

        <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework> 
    
  • 如果未安裝 C++ UWP 工具,則 C# 單項目 MSIX 應用程序不會編譯。 如果您有 C# 單項目 MSIX 項目,則需要安裝 C++ (v14x) 通用 Windows 平台工具 可選組件。
  • 安裝多個版本的 Visual Studio 2019 時,後續語言 VSIX 無法安裝到 Visual Studio 2019。 如果您安裝了多個版本的 Visual Studio 2019(例如 Release 和 Preview),然後安裝適用於 C++ 的 Windows App SDK VSIX  C#,第二次安裝會失敗。 要解決此問題,請在第一種語言 VSIX 之後卸載適用於 Visual Studio 2019 的單項目 MSIX 打包工具。 看法 這個反饋 有關此問題的更多信息。
  • 如果你想 co_await   DispatcherQueue.TryEnqueue 方法,然後使用 恢復前景 中的輔助函數 Windows 實現庫 (WIL):
    1. 添加引用 Microsoft.Windows.ImplementationLibrary NuGet 包。
    2. 添加 #include <wil/cppwinrt_helpers.h> 聲明到您的代碼文件。
    3. 使用 wil::resume_foreground(your_dispatcher); 至 co_await 結果。

閱讀更多信息並在 Microsoft 找到下載鏈接 点击這裡.

有關主題的更多資訊: Windows 應用 SDK 1.0.0, 威威3

發表評論

您的電子郵件地址將不會被發表。 必填字段標 *