Microsoft Windows App SDK 1.0 Stable släppt, tillgängligt för nedladdning (Release Notes)
12 min. läsa
Uppdaterad den
Läs vår informationssida för att ta reda på hur du kan hjälpa MSPoweruser upprätthålla redaktionen Läs mer
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ö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:
- 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):
- Vissa API:er kräver paketidentitet och stöds inte i opaketerade appar, som:
- Application Data
- StorageFile.GetFileFromApplicationUriAsync
- StorageFile.CreateStreamedFileFromUriAsync
- Apiinformation (stöds inte på Windows 10)
- Package.Current
- Alla API i Windows.ApplicationModel.Resources namespace
- Alla API i Microsoft.Windows.ApplicationModel.Resources namespace
- Vissa API:er kräver paketidentitet och stöds inte i opaketerade appar, som:
- 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älletPackage & 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 aktivConfiguration
isRelease
. - Smakämnen
Pack
kommandot stöds inte i C++ Windows Runtime Components för att skapa ett NuGet-paket.
- Smakämnen
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: PointerPoint, PointerPointPropertiesoch 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: GetCurrentPoint, GetCurrentPointTransformed, Få 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
- Opaketerade appar: Fullt användbar.
- Förpackade appar: Användbar, men dessa appar kan också använda plattformen
GetActivatedEventArgs
. Observera att plattformen definierar Windows.ApplicationModel.AppInstance medan Windows App SDK definierar Microsoft.Windows.AppLifecycle.AppInstance. Och medan UWP-appar kan användaActivatedEventArgs
klasser, t.ex.FileActivatedEventArgs
ochLaunchActivatedEventArgs
, appar som använder Windows App SDK AppLifecycle-funktionen måste använda gränssnitten inte klasserna (t.ex.IFileActivatedEventArgs
,ILaunchActivatedEventArgs
, och så vidare). - WinUi appar: WinUIs App.OnLaunched ges en Microsoft.UI.Xaml.LaunchActivatedEventArgs, medan plattformen
GetActivatedEventArgs
returnerar a Windows.ApplicationModel.IActivatedEventArgs, och WindowsAppSDKGetActivatedEventArgs
returnerar a Microsoft.Windows.AppLifecycle.AppActivationArguments objekt som kan representera en plattformLaunchActivatedEventArgs
. - För mer information, se Rik aktivering.
- 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:
x86
,x64
orarm64
. - 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):- Lägg till en referens till Microsoft.Windows.ImplementationLibrary NuGet-paket.
- Lägg till
#include <wil/cppwinrt_helpers.h>
uttalande till din kodfil. - Använda
wil::resume_foreground(your_dispatcher);
tillco_await
resultatet.
Läs mer och hitta nedladdningslänkarna hos Microsoft här..