Microsoft Windows App SDK 1.0 Stable släppt, tillgängligt för nedladdning (Release Notes)

Lästid ikon 12 min. läsa


Läsare hjälper till att stödja MSpoweruser. Vi kan få en provision om du köper via våra länkar. Verktygstipsikon

Läs vår informationssida för att ta reda på hur du kan hjälpa MSPoweruser upprätthålla redaktionen Läs mer

winUI

Efter flera förhandsversioner har Microsoft precis släppt Windows App SDK 1.0.0 Stable, en verktygslåda som ger utvecklare av stationära appar möjlighet att bygga appar med ett modernt Windows-gränssnitt, API:er och plattformsfunktioner.

I den här versionen lade Microsoft till flera nya funktioner från Windows App SDK 0.8 och stabiliserade problem från 1.0 Preview-versioner.

[lwptoc title=”WindowsAppSDK 1.0 Stabil” width=”30%” float=”höger”]

WindowsUI 3

WinUI 3 är den inbyggda användarupplevelsen (UX) ramverket för Windows App SDK.

Nya funktioner och uppdateringar:

  • Microsoft har lagt till nya kontroller (PipsPager, Expander, BreadcrumbBar) och uppdaterat befintliga kontroller för att återspegla de senaste Windows-stilarna från WindowsUI 2.6.
  • Enprojekts MSIX-paketering stöds i WinUI genom att skapa en ny applikation med mallen "Blank App, Packaged...".
  • Microsoft stöder nu distribution av WinUI 3-appar utan MSIX-paket på Windows-versioner 1809 och senare. Vänligen se Skapa en WinUI 3 opaketerad skrivbordsapp för ytterligare information.
  • WinUI 3-projekt kan nu ställa in sin målversion till Windows 10, version 1809. Tidigare kunde de bara ställas så lågt som version 1903.
  • Verktygsfält i appen, Hot Reload och Live Visual Tree för WinUI-paketerade appar stöds i Visual Studio 2022 Preview 5 och GA.

Viktiga begränsningar:

  • Kända problem för både paketerade och opaketerade WinUI-applikationer:
    • Körtidsfel i C++-appar som refererar till en C++ Windows Runtime-komponent: För att lösa det, lägg till målet nedan i slutet av Windows Runtime Components .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>
      
  • Kända problem för WinUI-applikationer med Single-project MSIX (Tom app, paketerad mall):
    • Saknas på menyalternativet Paketera och publicera tills du startar om Visual Studio: När du skapar en ny app med Single-project MSIX i både Visual Studio 2019 och Visual Studio 2022 med hjälp av projektmallen Blank App, Packaged (WinUI 3 i Desktop) visas inte kommandot för att publicera projektet i menyn förrän du stänger och öppna Visual Studio igen.
    • AC#-appen med Single-project MSIX kommer inte att kompilera utan tillvalskomponenten "C++ (v14x) Universal Windows Platform Tools" installerad. Se Installera utvecklarverktyg för ytterligare information.
    • Potentiellt körtidsfel i en app med Single-project MSIX som förbrukar typer definierade i en refererad Windows Runtime Component: För att lösa, lägg till manuellt aktiverbara klassposter till appxmanifest.xml.
      • Det förväntade felet i C#-applikationer är "COMException: Class not registered (0x80040154 (REGDB_E_CLASSNOTREG)).
      • Det förväntade felet i C++/WinRT-applikationer är "winrt::hresult_class_not_registered".
  • Kända problem för WinUI-applikationer utan MSIX-paket (opaketerade appar):
  • Kända problem för paketera och distribuera WinUI-applikationer:
    • Smakämnen Package kommandot stöds inte i WinUI-appar med Single-project MSIX (tom app, paketerad mall). Använd istället Package & Publish kommando för att skapa ett MSIX-paket.
    • För att skapa ett NuGet-paket från ett C#-klassbibliotek med Pack kommando, se till att den är aktiv Configuration is Release.
    • Smakämnen Pack kommandot stöds inte i C++ Windows Runtime Components för att skapa ett NuGet-paket.

fönster

Windows App SDK tillhandahåller en AppWindow klass som utvecklar den tidigare lättanvända förhandsvisningsklassen Windows.UI.WindowManagement.AppWindow och gör den tillgänglig för alla Windows-appar, inklusive Win32, WPF och WinForms.

Nya funktioner

  • AppWindow är ett API för fönster på hög nivå som möjliggör lättanvända fönsterscenarier som integreras väl med Windows-användarupplevelsen och med andra appar. Representerar en abstraktion på hög nivå av en systemhanterad behållare med innehållet i en app. Det här är behållaren som ditt innehåll är värd i och representerar den enhet som användare interagerar med när de ändrar storlek och flyttar din app på skärmen. För utvecklare som är bekanta med Win32 kan AppWindow ses som en abstraktion på hög nivå av HWND.
  • Visningsområde representerar en abstraktion på hög nivå av en HMONITOR, följer samma principer som AppWindow.
  • DisplayAreaWatcher tillåter en utvecklare att observera ändringar i visningstopologin och räkna upp DisplayAreas som för närvarande är definierade i systemet.

Ingång

Dessa är ingångs-API:erna som stöder WinUI och ger en API-yta på lägre nivå för utvecklare att uppnå mer avancerade indatainteraktioner.

Nya funktioner

  • Pekar-API:er: PointerPointPointerPointPropertiesoch PointEventArgs för att stödja hämtning av information om pekarhändelser med XAML-ingångs-API:er.
  • InputPointerSource API: Representerar ett objekt som är registrerat för att rapportera inmatning av pekare, och tillhandahåller hantering av pekare och ingångshändelser för XAML:s SwapChainPanel API.
  • Cursor API: Tillåter utvecklare att ändra markörbitmappen.
  • GestureRecognizer API: Tillåter utvecklare att känna igen vissa gester som att dra, hålla och klicka när de ges pekarinformation.

Viktiga begränsningar

  • Alla PointerPoint statiska fabriksfunktioner har tagits bort: GetCurrentPointGetCurrentPointTransformedFå IntermediatePointsoch GetIntermediatePointsTransformed.
  • Windows App SDK stöder inte hämtning PointerPoint objekt med pekar-ID. Istället kan du använda PointerPoint medlemsfunktion GetTransformedPoint för att hämta en transformerad version av en befintlig PointerPoint objekt. För mellanliggande poäng kan du använda PointEventArgs medlemsfunktioner Få IntermediatePoints och GetTransformedIntermediatePoints.
  • Direkt användning av plattformens SDK API Windows.UI.Core.CoreDragOperation fungerar inte med WinUI-program.
  • PointerPoint egenskaper RawPosition och Kontakta RectRaw togs bort eftersom de hänvisade till icke-förutsedda värden, som var desamma som normalvärdena i operativsystemet. Använda sig av Placera och KontaktaRect istället. Pekarförutsägelse hanteras nu med Microsoft.UI.Input.PointerPredictor API-objekt.

Appens livscykel

De flesta av App Lifecycle-funktionerna finns redan i UWP-plattformen och har tagits in i Windows App SDK för användning av stationära appar, särskilt opaketerade konsolappar, Win32-appar, Windows Forms-appar och WPF-appar. Windows App SDK-implementeringen av dessa funktioner kan inte användas i UWP-appar, eftersom det finns motsvarande funktioner i själva UWP-plattformen.

 Viktigt

Om du arbetar med en UWP-app, se UWP-migreringsvägledningen om du vill veta mer om att migrera din app till Windows App SDK.

Icke-UWP-appar kan också paketeras i MSIX-paket. Även om dessa appar kan använda vissa av Windows App SDK App Lifecycle-funktioner, måste de använda manifestmetoden där detta är tillgängligt. De kan till exempel inte använda Windows App SDK Registrera För XXXAktivering API:er och måste istället registrera sig för rik aktivering via manifestet.

Alla begränsningar för paketerade appar gäller även för WinUI-appar, som är paketerade, och det finns ytterligare överväganden som beskrivs nedan.

Viktiga överväganden:

  • Rik aktivering: GetActivatedEventArgs
  • Registrera/avregistrera för rik aktivering
    • Opaketerade appar: Fullt användbar.
    • Förpackade appar: Inte användbar använd appens MSIX-manifest istället.
    • För mer information, se Rik aktivering.
  • Singel/Multi-instans
    • Opaketerade appar: Fullt användbar.
    • Förpackade appar: Fullt användbar.
    • WinUI-appar: Om en app vill upptäcka andra instanser och omdirigera en aktivering måste den göra det så tidigt som möjligt, och innan initiering av några fönster etc. För att aktivera detta måste appen definiera DISABLE_XAML_GENERATED_MAIN, och skriva en anpassad Main (C#) eller WinMain (C++) där den kan göra upptäckt och omdirigering.
    • RedirectActivationToAsync är ett asynkront samtal, och du bör inte vänta på ett asynkront samtal om din app körs i en STA. För Windows Forms och C# WinUI-appar kan du deklarera Main som asynkron, om det behövs. För C++ WinUI och C# WPF-appar kan du inte deklarera Main som asynkron, så istället måste du flytta omdirigeringsanropet till en annan tråd för att säkerställa att du inte blockerar STA.
    • För mer information, se Appinstansering.
  • Aviseringar om kraft/tillstånd
    • Opaketerade appar: Fullt användbar.
    • Förpackade appar: Fullt användbar.
    • För mer information, se Strömhantering.

Känt problem:

  • Filtypsassociationer kodar felaktigt %1 till %251 när verbhanterarens kommandoradsmall ställs in, vilket kraschar oförpackade Win32-appar. Du kan manuellt redigera registervärdet så att det blir %1 istället som en dellösning. Om målfilens sökväg har ett mellanslag, kommer den fortfarande att misslyckas och det finns ingen lösning för det scenariot.
  • Dessa buggar för enstaka/multiinstanser kommer att fixas i en kommande servicepatch:
    • AppInstance-omdirigering fungerar inte när den kompileras för x86
    • Registrering av en nyckel, avregistrering av den och omregistrering gör att appen kraschar

WriteCore

DWriteCore är implementeringen av Windows App SDK Direct, som är DirectX API för högkvalitativ textåtergivning, upplösningsoberoende konturteckensnitt och fullt stöd för Unicode-text och layout. DWriteCore är en form av DirectWrite som körs på versioner av Windows ner till Windows 10, version 1809 (10.0; Build 17763), och öppnar dörren för dig att använda den på flera plattformar.

Funktioner DWriteCore innehåller alla funktioner i DirectWrite, med några få undantag.

Viktiga begränsningar

  • DWriteCore innehåller inte följande DirectWrite-funktioner:
    • Teckensnitt per session
    • Slutanvändardefinierade tecken (EUDC) teckensnitt
    • Font-streaming API:er
  • API-stöd för rendering på låg nivå är delvis.
  • DWriteCore samverkar inte med Direct2D, men du kan använda IDWriteGlyphRunAnalysis och IDWriteBitmapRenderTarget.

MRT kärna

MRT Core är en strömlinjeformad version av det moderna Windows Resurshanteringssystem som distribueras som en del av Windows App SDK.

Viktiga begränsningar

  • I .NET-projekt indexeras inte resursfiler som kopierats in i projektmappen på F5 om appen redan var byggd. Som en lösning kan du bygga om appen. Ser nummer 1503 för mer info.
  • I .NET-projekt, när en resursfil läggs till i projektet med hjälp av Visual Studio-gränssnittet, kanske filerna inte indexeras som standard. Ser nummer 1786 för mer information. För att kringgå det här problemet, ta bort posterna nedan i CSPROJ-filen:

    XML

    <ItemGroup>
        <Content Remove="<image file name>" />
    </ItemGroup>
    <ItemGroup>
        <PRIResource Remove="<resw file name>" />
    </ItemGroup>
    
  • För opaketerade C++ WinUI-appar är resurs-URI inte korrekt byggd. För att kringgå det här problemet, lägg till följande i vcxproj:

    XML

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

konfiguration

Nya funktioner och uppdateringar

  • Du kan automatiskt initiera Windows App SDK genom WindowsPackageType project egenskap för att ladda Windows App SDK-runtime och anropa Windows App SDK API:er. Ser Skapa en WinUI 3-app för instruktioner.
  • Opaketerade appar kan distribuera Windows App SDK genom att integreras i den fristående Windows App SDK .exe installationsprogrammet i ditt befintliga MSI eller installationsprogram. För mer information, se Installationsguide för Windows App SDK för opaketerade appar.
  • Opaketerade .NET-appar kan också använda .NET-omslag för bootstrapper API för att dynamiskt ta ett beroende av Windows App SDK-rampaketet vid körning. För mer information om .NET-omslaget, se .NET wrapper-bibliotek.
  • Paketerade appar kan använda distributions-API:et för att verifiera och säkerställa att alla nödvändiga paket är installerade på maskinen. För mer information om hur distributions-API:et fungerar, se distributionsguide för paketerade appar.

Viktiga begränsningar

  • .NET-omslaget för bootstrapper-API:et är endast avsett att användas av opaketerade .NET-program för att förenkla åtkomsten till Windows App SDK.
  • Endast MSIX-paketerade appar som är fullt förtroende eller har pakethantering begränsad kapacitet har behörighet att använda distributions-API:et för att installera huvud- och singleton-paketberoendena. Stöd för paketerade appar med partiellt förtroende kommer att komma i senare versioner.
  • När F5 testar en x86-app som använder DeploymentManager.Initialisera metod på ett x64-system, se till att x64-ramverket först installeras genom att köra WindowsAppRuntimeInstall.exe. Annars kommer du att stöta på en HITTADES INTE fel på grund av att Visual Studio inte distribuerar x64-ramverket, vilket normalt sker genom Store-distribution eller sidladdning.

Andra begränsningar och kända problem

  • Inget stöd för någon CPU-byggkonfiguration: När lägga till Windows App SDK till en befintlig .NET-applikation eller -komponent som stöder Vilken processor som helstmåste du ange önskad arkitektur: x86x64 or arm64.
  • Uppgraderar från .NET 5 till .NET 6: När du uppgraderar i Visual Studio-gränssnittet kan du stöta på byggfel. Som en lösning kan du manuellt uppdatera din projektfils TargetFrameworkPackage till följande:

    XML

        <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework> 
    
  • C# Single-project MSIX app kompileras inte om C++ UWP Tools inte är installerade. Om du har ett C# Single-project MSIX-projekt måste du installera C++ (v14x) Universal Windows-plattformsverktyg valfri komponent.
  • Efterföljande språk VSIX kan inte installeras i Visual Studio 2019 när flera versioner av Visual Studio 2019 är installerade. Om du har flera versioner av Visual Studio 2019 installerade (t.ex. Release and Preview) och sedan installera Windows App SDK VSIX för både C++ och C#, kommer den andra installationen att misslyckas. För att lösa det, avinstallera Single-project MSIX Packaging Tools for Visual Studio 2019 efter det första språket VSIX. Se denna feedback för ytterligare information om detta problem.
  • Om du vill co_await på DispatcherQueue.TryEnqueue metoden, använd sedan resume_foreground hjälparfunktion i Windows Implementation Library (WIL):
    1. Lägg till en referens till Microsoft.Windows.ImplementationLibrary NuGet-paket.
    2. Lägg till #include <wil/cppwinrt_helpers.h> uttalande till din kodfil.
    3. Använda wil::resume_foreground(your_dispatcher); till co_await resultatet.

Läs mer och hitta nedladdningslänkarna hos Microsoft här..

Mer om ämnena: Windows App SDK 1.0.0, winui 3