Winapp CLI gebruiken met op .NET-bestanden gebaseerde apps

Zie het dotnet-file-app-voorbeeld voor een werkend voorbeeld. Zie de modus voor één bestand in de CLI-verwijzing voor de volledige verwijzing.

.NET 10 kan één .cs-bestand uitvoeren zonder projectbestand. In deze handleiding ziet u hoe u dat bestand uitvoert met pakketidentiteit met behulp van winapp run, zodat API's zoals Windows.ApplicationModel.Package.Current, app-meldingen en AI op het apparaat werken. U maakt geen manifest- of afbeeldingsassets: winapp genereert ze voor u.

Pakketidentiteit is een kernconcept in het Windows app model. Hiermee kan uw toepassing toegang krijgen tot specifieke Windows API's, een schone installatie-/verwijderingservaring hebben en meer. Een op bestanden gebaseerde app die wordt uitgevoerd met dotnet run heeft geen pakketidentiteit.

Prerequisites

  1. .NET SDK 10.0.300 of hoger: installeer de .NET 10 SDK (vereist opnieuw opstarten na de installatie):

    winget install Microsoft.DotNet.SDK.10 --source winget
    
  2. winapp CLI: installeer het winapp hulpprogramma via winget (of werk bij als dit al is geïnstalleerd):

    winget install Microsoft.winappcli --source winget
    

1. Een app op basis van bestanden maken

Maak een map met een bestand met de naam hello.cs:

#:property OutputType=Exe
#:property TargetFramework=net10.0-windows10.0.19041.0

using Windows.ApplicationModel;

try
{
    Console.WriteLine($"Package Family Name: {Package.Current.Id.FamilyName}");
}
catch (InvalidOperationException)
{
    // Thrown when the app doesn't have package identity
    Console.WriteLine("Not packaged");
}

De #:property regels configureren de app zoals een .csproj dat zou. De Windows TargetFramework geeft de code toegang tot Windows Runtime API's, zoals Package.

Voer het uit met dotnet run:

dotnet run hello.cs

De uitvoer is Not packaged: de app wordt uitgevoerd zonder pakketidentiteit.

2. Uitvoeren met pakketidentiteit

Voer hetzelfde bestand uit met winapp:

winapp run hello.cs

winapp bouwt de app, genereert een manifest en standaard afbeeldingsassets in de build-uitvoer, registreert de app als een pakket en start deze. In de uitvoer ziet u nu de pakketidentiteit:

Package Family Name: hello-<hash>_<publisher-hash>

Uw bronmap bevat nog steeds alleen hello.cs. Omdat dit een console-app (OutputType=Exe) is, start winapp deze via uitvoeringsaliassen, zodat de uitvoer wordt weergegeven in uw terminal.

De registratie blijft aanwezig nadat de app is afgesloten, dus door winapp run hello.cs opnieuw uit te voeren, wordt dezelfde identiteit opnieuw gebruikt. U verwijdert deze in stap 5.

3. Geef uw pakket een naam

Standaard is de pakketnaam de bestandsnaam plus een korte hash van het pad van het bestand. Als u uw eigen naam wilt kiezen, moet u de registratie van het huidige pakket eerst opheffen, omdat een nieuwe naam een nieuw pakket registreert:

winapp unregister hello.cs

Voeg vervolgens #:property directives toe aan het begin van hello.cs:

#:property WinAppPackageName=com.contoso.hello
#:property WinAppDisplayName=Contoso Hello
#:property Version=1.0.0

Voer het opnieuw uit:

winapp run hello.cs

In de uitvoer wordt bijvoorbeeld Package Family Name: com.contoso.hello_<publisher-hash>de nieuwe naam weergegeven. De app wordt ook weergegeven in het startmenu als Contoso Hello.

Zie Manifesteigenschappen voor elke identiteitseigenschap en de standaardwaarde ervan.

4. Uitvoeren met dotnet run

Als u dezelfde start vanuit het pakket wilt ophalen vanaf platte dotnet run, geeft u bovenaan in hello.cs het pakket Microsoft.Windows.SDK.BuildTools.WinApp op:

#:package Microsoft.Windows.SDK.BuildTools.WinApp@*
dotnet run hello.cs

De uitvoer toont dezelfde pakketidentiteit als winapp run. Omdat dotnet run in een andere uitvoermap wordt gebouwd, wordt gewaarschuwd dat er een bestaande registratie wordt vervangen die vanaf een andere locatie is geïnstalleerd. Dit wordt verwacht en u kunt dit negeren.

Het pakket geeft de app ook een tijdelijk vensterpictogram, dus een venster-app toont een pictogram in de titelbalk. Als u uw eigen bestand wilt gebruiken, wijs ApplicationIcon naar een .ico-bestand:

#:property ApplicationIcon=Assets\MyApp.ico

Zie Uitvoeren met dotnet run voor de eigenschappen voor deze start.

5. Systeemopschoning

Verwijder de registratie door het .cs bestand door te geven aan winapp unregister:

winapp unregister hello.cs

Mogelijkheden of een aangepast manifest toevoegen

Sommige API's vereisen een gedeclareerde capability. De Windows AI-API's hebben systemAIModels bijvoorbeeld nodig:

#:property WinAppCapabilities=systemAIModels

winapp schrijft elke bevoegdheid naar het juiste manifestelement. Zie Capabilities voor de volledige lijst en naamgevingsregels.

Protocolhandlers, bestandskoppelingen en andere shell-integraties hebben een opgesteld manifest nodig. Plaats een hello.appxmanifest naast hello.cs en winapp gebruikt deze in plaats van er een te genereren. Zie Bring Your Own Manifest.

Volgende stappen

  • Distributiepakket: winapp run registreert de app alleen voor ontwikkeling. Als u een MSIX wilt produceren die u kunt verzenden, verplaatst u uw code naar een project en volgt u Verpakken met MSIX in de .NET handleiding.
  • Explore Windows API's: Met pakketidentiteit kunt u nu meldingen, on-device AI en andere identiteitsafhankelijke API's gebruiken