Microsoft Windows App SDK 1.0 Stable frigivet, tilgængelig til download (udgivelsesbemærkninger)

Ikon for læsetid 12 min. Læs


Læsere hjælper med at understøtte MSpoweruser. Vi får muligvis en kommission, hvis du køber via vores links. Værktøjstip-ikon

Læs vores oplysningsside for at finde ud af, hvordan du kan hjælpe MSPoweruser med at opretholde redaktionen Læs mere

winUI

Efter adskillige Preview-builds har Microsoft netop udgivet Windows App SDK 1.0.0 Stable, et værktøjssæt, der giver desktop-app-udviklere mulighed for at bygge apps med en moderne Windows-brugergrænseflade, API'er og platformsfunktioner.

I denne udgivelse tilføjede Microsoft flere nye funktioner fra Windows App SDK 0.8 og stabiliserede problemer fra 1.0 Preview-udgivelser.

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

WindowsUI 3

WinUI 3 er den native user experience (UX) ramme for Windows App SDK.

Nye funktioner og opdateringer:

  • Microsoft har tilføjet nye kontroller (PipsPager, Expander, BreadcrumbBar) og opdateret eksisterende kontroller for at afspejle de nyeste Windows-stile fra WindowsUI 2.6.
  • Enkeltprojekt MSIX-pakning understøttes i WinUI ved at oprette en ny applikation ved hjælp af skabelonen "Blank App, Packaged...".
  • Microsoft understøtter nu implementering af WinUI 3-apps uden MSIX-pakke på Windows-versioner 1809 og nyere. Se venligst Opret en WinUI 3 upakket desktop-app for yderligere oplysninger.
  • WinUI 3-projekter kan nu indstille deres målversion til Windows 10, version 1809. Tidligere kunne de kun indstilles så lavt som version 1903.
  • Værktøjslinje i appen, Hot Reload og Live Visual Tree til WinUI-pakkede apps understøttes i Visual Studio 2022 Preview 5 og GA.

Vigtige begrænsninger:

  • Kendte problemer for både pakkede og upakkede WinUI-applikationer:
    • Kørselsfejl i C++-apps, der refererer til en C++ Windows Runtime-komponent: For at løse det skal du tilføje nedenstående mål til slutningen af ​​Windows Runtime-komponentens .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>
      
  • Kendte problemer for WinUI-applikationer med Single-project MSIX (Blank app, pakket skabelon):
    • Manglende Pakke & Udgiv menupunkt, indtil du genstarter Visual Studio: Når du opretter en ny app med Single-project MSIX i både Visual Studio 2019 og Visual Studio 2022 ved hjælp af projektskabelonen Blank App, Packaged (WinUI 3 i Desktop), vises kommandoen til at publicere projektet ikke i menuen, før du lukker og genåbn Visual Studio.
    • AC# app med Single-project MSIX vil ikke kompilere uden "C++ (v14x) Universal Windows Platform Tools" valgfri komponent installeret. Udsigt Installer udviklerværktøjer for yderligere oplysninger.
    • Potentiel køretidsfejl i en app med Single-project MSIX, der bruger typer defineret i en refereret Windows Runtime Component: For at løse, tilføje manuelt aktiverbare klasseposter til appxmanifest.xml.
      • Den forventede fejl i C#-applikationer er "COMException: Klasse ikke registreret (0x80040154 (REGDB_E_CLASSNOTREG)).
      • Den forventede fejl i C++/WinRT-applikationer er "winrt::hresult_class_not_registered".
  • Kendte problemer for WinUI applikationer uden MSIX-pakke (upakkede apps):
  • Kendte problemer for pakning og implementering af WinUI-applikationer:
    •  Package kommandoen er ikke understøttet i WinUI-apps med enkeltprojekt MSIX (tom app, pakket skabelon). Brug i stedet Package & Publish kommando for at oprette en MSIX-pakke.
    • For at oprette en NuGet-pakke fra et C#-klassebibliotek med Pack kommando, sikre den aktive Configuration is Release.
    •  Pack kommandoen er ikke understøttet i C++ Windows Runtime Components til at oprette en NuGet-pakke.

Vindue

Windows App SDK giver en AppWindow klasse, der udvikler den tidligere brugervenlige Windows.UI.WindowManagement.AppWindow preview-klasse og gør den tilgængelig for alle Windows-apps, inklusive Win32, WPF og WinForms.

Nye funktioner

  • AppWindow er en vindues-API på højt niveau, der giver mulighed for letanvendelige vinduesscenarier, der integreres godt med Windows-brugeroplevelsen og med andre apps. Repræsenterer en abstraktion på højt niveau af en systemstyret beholder med indholdet af en app. Dette er den container, som dit indhold hostes i, og repræsenterer den enhed, som brugerne interagerer med, når de ændrer størrelsen og flytter din app på skærmen. For udviklere, der er fortrolige med Win32, kan AppWindow ses som en abstraktion på højt niveau af HWND.
  • DisplayArea repræsenterer en abstraktion på højt niveau af en HMONITOR, følger de samme principper som AppWindow.
  • DisplayAreaWatcher giver en udvikler mulighed for at observere ændringer i skærmtopologien og opregne DisplayAreas, der aktuelt er defineret i systemet.

Input

Disse er input-API'erne, der understøtter WinUI og giver en API-overflade på et lavere niveau for udviklere for at opnå mere avancerede input-interaktioner.

Nye funktioner

  • Pointer API'er: PointerPointPointerPointPropertiesog PointEventArgs for at understøtte hentning af pointerhændelsesinformation med XAML input API'er.
  • InputPointerSource API: Repræsenterer et objekt, der er registreret til at rapportere pointerinput og giver håndtering af markørmarkør og inputhændelse for XAML's SwapChainPanel API.
  • Cursor API: Giver udviklere mulighed for at ændre markørens bitmap.
  • GestureRecognizer API: Giver udviklere mulighed for at genkende visse bevægelser, såsom træk, hold og klik, når de får markøroplysninger.

Vigtige begrænsninger

  • Alle PointerPoint statiske fabriksfunktioner er blevet fjernet: GetCurrentPointGetCurrentPointTransformeretFå IntermediatePointsog GetIntermediatePointsTransformeret.
  • Windows App SDK understøtter ikke hentning PointerPoint objekter med pointer-id'er. I stedet kan du bruge PointerPoint medlemsfunktion GetTransformedPoint. at hente en transformeret version af en eksisterende PointerPoint objekt. Til mellempunkter kan du bruge PointEventArgs medlemsfunktioner Få IntermediatePoints , GetTransformedIntermediatePoints.
  • Direkte brug af platformens SDK API Windows.UI.Core.CoreDragOperation vil ikke fungere med WinUI-applikationer.
  • PointerPoint egenskaber RawPosition , Kontakt RecRaw blev fjernet, fordi de henviste til ikke-forudsete værdier, som var de samme som de normale værdier i OS. Brug Position , Kontakt Rec i stedet. Pointer-forudsigelse håndteres nu med Microsoft.UI.Input.PointerPredictor API objekt.

Appens livscyklus

De fleste af App Lifecycle-funktionerne findes allerede i UWP-platformen og er blevet bragt ind i Windows App SDK til brug af desktop-apptyper, især upakkede konsolapps, Win32-apps, Windows Forms-apps og WPF-apps. Windows App SDK-implementeringen af ​​disse funktioner kan ikke bruges i UWP-apps, da der er tilsvarende funktioner i selve UWP-platformen.

 Vigtig

Hvis du arbejder på en UWP-app, se UWP-migreringsvejledningen for at lære mere om migrering af din app til Windows App SDK.

Ikke-UWP-apps kan også pakkes ind i MSIX-pakker. Selvom disse apps kan bruge nogle af Windows App SDK App Lifecycle-funktionerne, skal de bruge den manifeste tilgang, hvor dette er tilgængeligt. For eksempel kan de ikke bruge Windows App SDK Registrer ForXXXAktivering API'er og skal i stedet registrere sig for rig aktivering via manifestet.

Alle begrænsningerne for pakkede apps gælder også for WinUI-apps, som er pakket, og der er yderligere overvejelser som beskrevet nedenfor.

Vigtige overvejelser:

  • Rig aktivering: GetActivatedEventArgs
  • Registrer/afregistrer for rig aktivering
    • Upakkede apps: Fuldt anvendelig.
    • Pakkede apps: Ikke brugbart brug appens MSIX-manifest i stedet for.
    • For mere info, se Rig aktivering.
  • Single/Multi-instans
    • Upakkede apps: Fuldt anvendelig.
    • Pakkede apps: Fuldt anvendelig.
    • WinUI apps: Hvis en app ønsker at detektere andre forekomster og omdirigere en aktivering, skal den gøre det så tidligt som muligt, og før initialisering af vinduer osv. For at aktivere dette skal appen definere DISABLE_XAML_GENERATED_MAIN, og skrive en brugerdefineret Main (C#) eller WinMain (C++), hvor den kan udføre detektering og omdirigering.
    • RedirectActivationToAsync er et asynkront opkald, og du bør ikke vente på et asynkront opkald, hvis din app kører i en STA. For Windows Forms og C# WinUI apps kan du erklære Main for asynkron, hvis det er nødvendigt. For C++ WinUI og C# WPF apps kan du ikke erklære Main for at være asynkron, så i stedet skal du flytte omdirigeringskaldet til en anden tråd for at sikre, at du ikke blokerer STA.
    • For mere info, se App-instansering.
  • Underretninger om strøm/tilstand
    • Upakkede apps: Fuldt anvendelig.
    • Pakkede apps: Fuldt anvendelig.
    • For mere info, se Strømstyring.

Kendt problem:

  • Filtypetilknytninger koder forkert %1 til at være %251, når verbbehandlerens kommandolinjeskabelon indstilles, som nedbryder upakkede Win32-apps. Du kan manuelt redigere registreringsdatabaseværdien til at være %1 i stedet for som en delvis løsning. Hvis målfilstien har et mellemrum, vil den stadig mislykkes, og der er ingen løsning til det scenarie.
  • Disse enkelt-/multi-instanser-fejl vil blive rettet i en kommende servicerettelse:
    • AppInstance-omdirigering virker ikke, når den er kompileret til x86
    • Registrering af en nøgle, afregistrering af den og genregistrering af den får appen til at gå ned

WriteCore

DWriteCore er Windows App SDK-implementeringen af DirectWrite, som er DirectX API til tekstgengivelse i høj kvalitet, opløsningsuafhængige dispositionsskrifttyper og fuld Unicode-tekst- og layoutunderstøttelse. DWriteCore er en form for DirectWrite, der kører på versioner af Windows ned til Windows 10, version 1809 (10.0; Build 17763), og åbner døren for, at du kan bruge det på tværs af platforme.

Funktionalitet DWriteCore indeholder alle funktionerne i DirectWrite, med nogle få undtagelser.

Vigtige begrænsninger

  • DWriteCore indeholder ikke følgende DirectWrite-funktioner:
    • Per-session skrifttyper
    • Slutbrugerdefinerede tegn (EUDC) skrifttyper
    • Font-streaming API'er
  • Understøttelse af API-gengivelse på lavt niveau er delvis.
  • DWriteCore interopererer ikke med Direct2D, men du kan bruge IDWriteGlyphRunAnalysis , IDWriteBitmapRenderTarget.

MRT kerne

MRT Core er en strømlinet version af det moderne Windows Ressource Management System der distribueres som en del af Windows App SDK.

Vigtige begrænsninger

  • I .NET-projekter indekseres ressourcefiler, der er kopieret ind i projektmappen, ikke på F5, hvis appen allerede var bygget. Som en løsning skal du genopbygge appen. Se nr. 1503 for mere info.
  • I .NET-projekter, når en ressourcefil føjes til projektet ved hjælp af Visual Studio UI, indekseres filerne muligvis ikke som standard. Se nr. 1786 for mere info. For at løse dette problem skal du fjerne nedenstående poster i CSPROJ-filen:

    XML

    <ItemGroup>
        <Content Remove="<image file name>" />
    </ItemGroup>
    <ItemGroup>
        <PRIResource Remove="<resw file name>" />
    </ItemGroup>
    
  • For upakkede C++ WinUI-apps er ressource-URI'en ikke bygget korrekt. For at omgå dette problem skal du tilføje følgende i vcxproj:

    XML

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

Deployment

Nye funktioner og opdateringer

  • Du kan automatisk initialisere Windows App SDK gennem WindowsPackageType project egenskab for at indlæse Windows App SDK-runtime og kalde Windows App SDK API'er. Se Opret en WinUI 3-app for at få vejledning.
  • Upakkede apps kan implementere Windows App SDK ved at integrere i den selvstændige Windows App SDK .exe installationsprogram til dit eksisterende MSI eller opsætningsprogram. For mere info, se Windows App SDK-implementeringsvejledning til upakkede apps.
  • Upakkede .NET apps kan også bruge .NET wrapper til bootstrapper API til dynamisk at tage en afhængighed af Windows App SDK-rammepakken under kørsel. For mere information om .NET-indpakningen, se .NET wrapper bibliotek.
  • Pakkede apps kan bruge implementerings-API'en til at verificere og sikre, at alle nødvendige pakker er installeret på maskinen. For mere information om, hvordan implementerings-API'en fungerer, se implementeringsvejledning til pakkede apps.

Vigtige begrænsninger

  • .NET-indpakningen til bootstrapper-API'en er kun beregnet til brug af upakkede .NET-applikationer for at forenkle adgangen til Windows App SDK.
  • Kun MSIX-pakkede apps, der er fuld tillid eller har pakkehåndtering begrænset kapacitet har tilladelse til at bruge implementerings-API'en til at installere hoved- og singleton-pakkeafhængighederne. Understøttelse af pakkede apps med delvis tillid vil komme i senere udgivelser.
  • Når F5 tester en x86-app, der bruger DeploymentManager.Initialiser metode på et x64-system, skal du sikre dig, at x64-rammeværket først installeres ved at køre WindowsAppRuntimeInstall.exe. Ellers vil du støde på en IKKE FUNDET fejl på grund af, at Visual Studio ikke implementerer x64-frameworket, hvilket normalt sker gennem Store-implementering eller sideloading.

Andre begrænsninger og kendte problemer

  • Ingen understøttelse af enhver CPU-bygningskonfiguration: Hvornår tilføjelse af Windows App SDK til en eksisterende .NET-applikation eller -komponent, der understøtter Enhver CPU, skal du angive den ønskede arkitektur: x86x64 or arm64.
  • Opgradering fra .NET 5 til .NET 6: Når du opgraderer i Visual Studio UI, kan du løbe ind i build-fejl. Som en løsning skal du manuelt opdatere din projektfils TargetFrameworkPackage til nedenstående:

    XML

        <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework> 
    
  • C# Single-project MSIX app kompilerer ikke, hvis C++ UWP Tools ikke er installeret. Hvis du har et C# Single-project MSIX-projekt, skal du installere C++ (v14x) Universal Windows-platformværktøjer valgfri komponent.
  • Efterfølgende sprog VSIX kan ikke installeres i Visual Studio 2019, når flere versioner af Visual Studio 2019 er installeret. Hvis du har flere versioner af Visual Studio 2019 installeret (f.eks. Release and Preview) og derefter installere Windows App SDK VSIX til både C++ , C#, vil den anden installation mislykkes. For at løse problemet skal du afinstallere Single-project MSIX Packaging Tools for Visual Studio 2019 efter det første sprog VSIX. Udsigt denne feedback for yderligere oplysninger om dette problem.
  • Hvis du ønsker at co_await på den DispatcherQueue.TryEnqueue metode, og brug derefter resume_foreground hjælperfunktion i Windows Implementation Library (WIL):
    1. Tilføj en reference til Microsoft.Windows.ImplementationLibrary NuGet pakke.
    2. Tilsæt #include <wil/cppwinrt_helpers.h> erklæring til din kodefil.
    3. Brug wil::resume_foreground(your_dispatcher); til co_await resultatet.

Læs mere og find downloadlinkene hos Microsoft link..

Mere om emnerne: Windows App SDK 1.0.0, winui 3