Vydána stabilní sada Microsoft Windows App SDK 1.0, dostupná ke stažení (poznámky k verzi)

Ikona času čtení 12 min. číst


Čtenáři pomáhají podporovat MSpoweruser. Pokud nakoupíte prostřednictvím našich odkazů, můžeme získat provizi. Ikona popisku

Přečtěte si naši informační stránku a zjistěte, jak můžete pomoci MSPoweruser udržet redakční tým Dozvědět se více

winUI

Po několika verzích Preview společnost Microsoft právě vydala Windows App SDK 1.0.0 Stable, sadu nástrojů, která umožňuje vývojářům desktopových aplikací vytvářet aplikace s moderním uživatelským rozhraním Windows, rozhraními API a funkcemi platformy.

V této verzi Microsoft přidal několik nových funkcí z Windows App SDK 0.8 a stabilizoval problémy z 1.0 Preview verzí.

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

WindowsUI 3

WinUI 3 je nativní uživatelský rámec (UX) pro Windows App SDK.

Nové funkce a aktualizace:

  • Microsoft přidal nové ovládací prvky (PipsPager, Expander, BreadcrumbBar) a aktualizoval stávající ovládací prvky, aby odrážely nejnovější styly Windows z WindowsUI 2.6.
  • Jednoprojektové balení MSIX je podporováno ve WinUI vytvořením nové aplikace pomocí šablony „Blank App, Packaged…“.
  • Microsoft nyní podporuje nasazení aplikací WinUI 3 bez balíčku MSIX na Windows verze 1809 a vyšší. Prohlédněte si prosím Vytvořte nezabalenou desktopovou aplikaci WinUI 3 Další informace.
  • Projekty WinUI 3 nyní mohou nastavit svou cílovou verzi až na Windows 10, verze 1809. Dříve je bylo možné nastavit pouze na verzi 1903.
  • V sadě Visual Studio 2022 Preview 5 a GA jsou podporovány panely nástrojů v aplikaci, Hot Reload a Live Visual Tree pro zabalené aplikace WinUI.

Důležitá omezení:

  • Známé problémy pro zabalené i nezabalené aplikace WinUI:
    • Chyba běhu v aplikacích C++, které odkazují na běhovou komponentu C++ Windows: Chcete-li to vyřešit, přidejte níže uvedený cíl na konec souboru .vcxproj součásti Windows Runtime Component:

      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>
      
  • Známé problémy pro WinUI aplikace s Single-project MSIX (Prázdná aplikace, zabalená šablona):
    • Chybějící položka nabídky Package & Publish, dokud nerestartujete Visual Studio: Při vytváření nové aplikace pomocí Single-project MSIX v sadě Visual Studio 2019 i Visual Studio 2022 pomocí šablony projektu Blank App, Packaged (WinUI 3 na ploše), příkaz k publikování projektu se v nabídce nezobrazí, dokud nezavřete a znovu otevřete Visual Studio.
    • Aplikace AC# s MSIX s jedním projektem se nezkompiluje bez nainstalované volitelné součásti „C++ (v14x) Universal Windows Platform Tools“. Pohled Nainstalujte vývojářské nástroje Další informace.
    • Potenciální chyba běhu v aplikaci s MSIX s jedním projektem, která spotřebovává typy definované v odkazované běhové komponentě Windows: Chcete-li vyřešit, přidejte ručně aktivovatelné položky třídy do souboru appxmanifest.xml.
      • Očekávaná chyba v aplikacích C# je „COMException: Třída není zaregistrována (0x80040154 (REGDB_E_CLASSNOTREG)).
      • Očekávaná chyba v aplikacích C++/WinRT je „winrt::hresult_class_not_registered“.
  • Známé problémy pro Aplikace WinUI bez balení MSIX (nezabalené aplikace):
  • Známé problémy pro balení a nasazení aplikací WinUI:
    • Projekt Package příkaz není podporován v aplikacích WinUI s MSIX s jedním projektem (prázdná aplikace, zabalená šablona). Místo toho použijte Package & Publish příkaz k vytvoření balíčku MSIX.
    • Chcete-li vytvořit balíček NuGet z knihovny tříd C# pomocí Pack příkaz, zajistit aktivní Configuration is Release.
    • Projekt Pack Příkaz není podporován v C++ Windows Runtime Components k vytvoření balíčku NuGet.

Okna

Windows App SDK poskytuje AppWindow třída, která rozvíjí předchozí snadno použitelnou třídu náhledu Windows.UI.WindowManagement.AppWindow a zpřístupňuje ji všem aplikacím Windows, včetně Win32, WPF a WinForms.

Nové funkce

  • AppWindow je rozhraní API pro vytváření oken na vysoké úrovni, které umožňuje snadno použitelné scénáře vytváření oken, které se dobře integrují s uživatelským prostředím Windows a dalšími aplikacemi. Představuje abstrakci na vysoké úrovni z kontejneru obsahu aplikace spravovaného systémem. Toto je kontejner, ve kterém je hostován váš obsah, a představuje entitu, se kterou uživatelé interagují, když mění velikost a přesouvají vaši aplikaci na obrazovce. Pro vývojáře obeznámené s Win32 může být AppWindow chápáno jako abstrakce HWND na vysoké úrovni.
  • DisplayArea představuje abstrakci HMONITOR na vysoké úrovni, řídí se stejnými principy jako AppWindow.
  • DisplayAreaWatcher umožňuje vývojáři sledovat změny v topologii zobrazení a vyjmenovat oblasti zobrazení aktuálně definované v systému.

Vstup

Jedná se o vstupní rozhraní API, která podporují WinUI a poskytují vývojářům povrch rozhraní API nižší úrovně, aby mohli dosáhnout pokročilejších interakcí se vstupy.

Nové funkce

  • Ukazatel API: PointerPointVlastnosti PointerPoint, a PointEventArgs pro podporu načítání informací o události ukazatele pomocí vstupních rozhraní API XAML.
  • InputPointerSource API: Představuje objekt, který je registrován pro hlášení vstupu ukazatele a poskytuje kurzor ukazatele a zpracování vstupních událostí pro rozhraní API SwapChainPanel XAML.
  • API kurzoru: Umožňuje vývojářům změnit bitmapu kurzoru.
  • GestureRecognizer API: Umožňuje vývojářům rozpoznat určitá gesta, jako je přetažení, podržení a kliknutí, když jsou poskytnuty informace o ukazateli.

Důležitá omezení

  • Zobrazit vše PointerPoint statické tovární funkce byly odstraněny: GetCurrentPointGetCurrentPointTransformedGetIntermediatePoints, a GetIntermediatePointsTransformed.
  • Sada Windows App SDK nepodporuje načítání PointerPoint objekty s ID ukazatelů. Místo toho můžete použít PointerPoint členská funkce GetTransformedPoint k načtení transformované verze existujícího PointerPoint objekt. Pro mezilehlé body můžete použít PointEventArgs členské funkce GetIntermediatePoints  a  GetTransformedIntermediatePoints.
  • Přímé použití platformy SDK API Operace Windows.UI.Core.CoreDragOperation nebude fungovat s aplikacemi WinUI.
  • PointerPoint vlastnosti RawPosition  a  ContactRectRaw byly odstraněny, protože odkazovaly na nepředpokládané hodnoty, které byly stejné jako normální hodnoty v OS. Použití Pozice  a  ContactRect namísto. Predikce ukazatele je nyní zpracována pomocí Microsoft.UI.Input.PointerPredictor API objekt.

Životní cyklus aplikace

Většina funkcí životního cyklu aplikací již na platformě UWP existuje a byla přenesena do sady Windows App SDK pro použití typy aplikací pro stolní počítače, zejména nezabalené aplikace konzoly, aplikace Win32, aplikace Windows Forms a aplikace WPF. Implementaci těchto funkcí Windows App SDK nelze použít v aplikacích UWP, protože v samotné platformě UWP jsou ekvivalentní funkce.

 důležitý

Pokud pracujete na aplikaci UWP, viz pokyny pro migraci UWP se dozvíte více o migraci vaší aplikace na Windows App SDK.

Aplikace bez UWP mohou být také zabaleny do balíčků MSIX. I když tyto aplikace mohou používat některé funkce životního cyklu aplikací Windows App SDK, musí používat přístup manifestu, pokud je k dispozici. Nemohou například používat Windows App SDK RegisterForXXXActivation API a musí se místo toho zaregistrovat pro aktivaci rozšířené funkce prostřednictvím manifestu.

Všechna omezení pro zabalené aplikace platí také pro aplikace WinUI, které jsou zabalené, a jsou zde další úvahy popsané níže.

Důležité úvahy:

  • Bohatá aktivace: GetActivatedEventArgs
  • Zaregistrujte se/zrušte registraci pro bohatou aktivaci
    • Rozbalené aplikace: Plně použitelné.
    • Zabalené aplikace: Nepoužitelné, použijte místo toho manifest aplikace MSIX.
    • Další informace viz Bohatá aktivace.
  • Single/Multi-instance
    • Rozbalené aplikace: Plně použitelné.
    • Zabalené aplikace: Plně použitelné.
    • aplikace WinUI: Pokud chce aplikace detekovat další instance a přesměrovat aktivaci, musí tak učinit co nejdříve a před inicializací oken atd. Chcete-li to povolit, musí aplikace definovat DISABLE_XAML_GENERATED_MAIN a napsat vlastní hlavní (C#) nebo WinMain (C++), kde může provést detekci a přesměrování.
    • RedirectActivationToAsync je asynchronní volání a neměli byste čekat na asynchronní volání, pokud vaše aplikace běží v STA. Pro Windows Forms a aplikace C# WinUI můžete v případě potřeby prohlásit Main za asynchronní. U aplikací C++ WinUI a C# WPF nemůžete prohlásit Main za asynchronní, takže místo toho musíte přesunout volání přesměrování do jiného vlákna, abyste zajistili, že neblokujete STA.
    • Další informace viz Instance aplikace.
  • Upozornění na napájení/stav
    • Rozbalené aplikace: Plně použitelné.
    • Zabalené aplikace: Plně použitelné.
    • Další informace viz Řízení spotřeby.

Známý problém:

  • Při nastavování šablony příkazového řádku obslužné rutiny slovesa přidružení typu souboru nesprávně kódují %1 na %251, což způsobí zhroucení nezabalených aplikací Win32. Místo toho můžete ručně upravit hodnotu registru na %1 jako částečné řešení. Pokud cesta k cílovému souboru obsahuje mezeru, pak se stále nezdaří a pro tento scénář neexistuje žádné řešení.
  • Tyto chyby s jednou/více instancemi budou opraveny v nadcházející opravě:
    • Přesměrování AppInstance nefunguje při kompilaci pro x86
    • Registrace klíče, jeho zrušení a opětovná registrace způsobí selhání aplikace

WriteCore

DWriteCore je implementace Windows App SDK DirectWrite, což je rozhraní DirectX API pro vysoce kvalitní vykreslování textu, obrysová písma nezávislá na rozlišení a plnou podporu textu a rozložení Unicode. DWriteCore je forma DirectWrite, která běží na verzích Windows až po Windows 10, verze 1809 (10.0; Build 17763), a otevírá vám dveře k použití na různých platformách.

Funkce DWriteCore obsahuje všechny funkce DirectWrite, s několika výjimkami.

Důležitá omezení

  • DWriteCore neobsahuje následující funkce DirectWrite:
    • Písma pro jednotlivé relace
    • Fonty znaků definovaných koncovým uživatelem (EUDC).
    • Rozhraní API pro streamování písem
  • Podpora nízkoúrovňového vykreslovacího API je částečná.
  • DWriteCore nespolupracuje s Direct2D, ale můžete jej použít IDWriteGlyphRunAnalysis  a  IDWriteBitmapRenderTarget.

Jádro MRT

MRT Core je zjednodušená verze moderního systému Windows Systém řízení zdrojů který je distribuován jako součást Windows App SDK.

Důležitá omezení

  • V projektech .NET nejsou zdrojové soubory zkopírované a vložené do složky projektu indexovány na F5, pokud již byla aplikace vytvořena. Řešením je přebudování aplikace. Vidět vydání 1503 pro více informací.
  • V projektech .NET, když je do projektu přidán zdrojový soubor pomocí uživatelského rozhraní Visual Studio, nemusí být soubory ve výchozím nastavení indexovány. Vidět vydání 1786 pro více informací. Chcete-li tento problém vyřešit, odeberte níže uvedené položky v souboru CSPROJ:

    XML

    <ItemGroup>
        <Content Remove="<image file name>" />
    </ItemGroup>
    <ItemGroup>
        <PRIResource Remove="<resw file name>" />
    </ItemGroup>
    
  • U nezabalených aplikací C++ WinUI není identifikátor URI prostředku sestaven správně. Chcete-li tento problém vyřešit, přidejte do vcxproj následující:

    XML

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

Rozvinutí

Nové funkce a aktualizace

  • Sadu Windows App SDK můžete automaticky inicializovat prostřednictvím WindowsPackageType project vlastnost k načtení runtime sady Windows App SDK a volání rozhraní API sady Windows App SDK. Vidět Vytvořte aplikaci WinUI 3 pokyny.
  • Nezabalené aplikace mohou nasadit Windows App SDK integrací do samostatné Windows App SDK .exe instalační program do vašeho stávajícího MSI nebo instalačního programu. Více informací viz Průvodce nasazením sady Windows App SDK pro nezabalené aplikace.
  • Nebalené aplikace .NET mohou také používat .NET wrapper pro bootstrapper API dynamicky převzít závislost na balíčku frameworku Windows App SDK za běhu. Další informace o .NET wrapperu viz Knihovna obalů .NET.
  • Zabalené aplikace mohou použít rozhraní API pro nasazení k ověření a zajištění, že jsou na počítači nainstalovány všechny požadované balíčky. Další informace o tom, jak funguje rozhraní API pro nasazení, najdete v průvodce nasazením pro zabalené aplikace.

Důležitá omezení

  • .NET wrapper pro bootstrapper API je určen pouze pro použití nezabalenými aplikacemi .NET ke zjednodušení přístupu k Windows App SDK.
  • Pouze aplikace zabalené v MSIX, které plně důvěřují nebo mají správa balíků omezené schopnosti mají oprávnění používat rozhraní API pro nasazení k instalaci závislostí hlavního a jediného balíčku. Podpora pro zabalené aplikace s částečnou důvěrou bude k dispozici v pozdějších verzích.
  • Když F5 testuje aplikaci x86, která používá DeploymentManager.Initialize v systému x64 zajistěte, aby byl nejprve nainstalován rámec x64 spuštěním WindowsAppRuntimeInstall.exe. V opačném případě narazíte na a NENALEZENO chyba způsobená tím, že Visual Studio nenasazuje x64 framework, k čemuž normálně dochází při nasazení Store nebo sideloadingu.

Další omezení a známé problémy

  • Žádná podpora pro jakoukoli konfiguraci sestavení CPU: Když přidání sady Windows App SDK na existující aplikaci nebo komponentu .NET, která podporuje Jakýkoli CPU, musíte zadat požadovanou architekturu: x86x64 or arm64.
  • Upgrade z .NET 5 na .NET 6: Při upgradu v uživatelském rozhraní sady Visual Studio můžete narazit na chyby sestavení. Jako náhradní řešení ručně aktualizujte balíček TargetFrameworkPackage souboru projektu na níže uvedený:

    XML

        <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework> 
    
  • C# Jednoprojektová aplikace MSIX se nezkompiluje, pokud nejsou nainstalovány C++ UWP Tools. Pokud máte projekt C# Single-project MSIX, budete muset nainstalovat C++ (v14x) Univerzální nástroje platformy Windows volitelná součást.
  • Následující jazyk VSIX se nepodaří nainstalovat do sady Visual Studio 2019, když je nainstalováno více verzí sady Visual Studio 2019. Pokud máte nainstalovaných více verzí sady Visual Studio 2019 (např. Release a Preview) a poté nainstalujte Windows App SDK VSIX pro oba C++  a  C#, druhá instalace se nezdaří. Chcete-li to vyřešit, odinstalujte Single-project MSIX Packaging Tools for Visual Studio 2019 po prvním jazyce VSIX. Pohled tuto zpětnou vazbu pro další informace o tomto problému.
  • Pokud chcete co_await na DispatcherQueue.TryEnqueue metodu, pak použijte pokračovat v popředí pomocná funkce v Windows Implementation Library (WIL):
    1. Přidejte odkaz na Microsoft.Windows.ImplementationLibrary Balíček NuGet.
    2. Přidat #include <wil/cppwinrt_helpers.h> výpis do vašeho souboru kódu.
    3. Použijte  wil::resume_foreground(your_dispatcher); na co_await výsledek.

Přečtěte si více a najděte odkazy ke stažení na webu Microsoft zde.

Více o tématech: Windows App SDK 1.0.0, winui 3