Delen via


Winapp CLI gebruiken met .NET

Opmerking

Deze handleiding werkt voor de meeste .NET project typen. De stappen zijn getest met zowel console- als op gebruikersinterface gebaseerde projecten, zoals WPF.

Deze handleiding laat zien hoe u de winapp CLI gebruikt met een .NET-toepassing om fouten op te sporen met pakketidentiteit en uw toepassing als msix te verpakken.

Pakketidentiteit is een kernconcept in het Windows app model. Hiermee kan uw toepassing specifieke Windows-API's (zoals meldingen, beveiliging, AI-API's, enzovoort) access, een schone installatie-/verwijderingservaring hebben, en meer.

Vereiste voorwaarden

  1. .NET SDK: installeer de .NET SDK:

    winget install Microsoft.DotNet.SDK.10 --source winget
    
  2. winapp CLI: Installeer het winapp hulpprogramma via winget:

    winget install Microsoft.winappcli --source winget
    

1. Een nieuwe .NET-app maken

Begin met het maken van een eenvoudige .NET consoletoepassing:

dotnet new console -n dotnet-app
cd dotnet-app

Voer deze uit om te controleren of alles werkt:

dotnet run

2. Werk code bij om de identiteit te controleren

Werk eerst uw project-bestand bij om een specifieke Windows SDK-versie te targeten. Open dotnet-app.csproj en wijzig het TargetFramework element volgende:

<TargetFramework>net10.0-windows10.0.26100.0</TargetFramework>

Vervang nu de inhoud van Program.cs:

using Windows.ApplicationModel;

try
{
    var package = Package.Current;
    var familyName = package.Id.FamilyName;
    Console.WriteLine($"Package Family Name: {familyName}");
}
catch (InvalidOperationException)
{
    Console.WriteLine("Not packaged");
}

3. Uitvoeren zonder identiteit

dotnet run

U ziet nu 'Niet verpakt'.

4. Initialiseer project met winapp CLI

De opdracht winapp init detecteert automatisch .csproj bestanden en voert een .NET-specifieke installatie uit:

winapp init

Wanneer u hierom wordt gevraagd:

  • Pakketnaam: druk op Enter om de standaardwaarde te accepteren
  • Publisher naam: Druk op Enter om de standaardinstelling te accepteren of voer uw naam in
  • Beschrijving: Druk op Enter om de standaardinstelling te accepteren of voer een beschrijving in
  • Versie: Druk op Enter om 1.0.0.0 te accepteren
  • Toegangspunt: Druk op Enter om de standaardwaarde (dotnet-app.exe) te accepteren
  • Windows App SDK setup: Selecteer Stabiel, Voorbeeld of Experimenteel

Deze opdracht:

  • Hiermee werkt u TargetFramework in .csproj bij naar een ondersteunde Windows TFM (indien nodig)
  • Voegt Microsoft.WindowsAppSDK en Microsoft.Windows.SDK.BuildTools NuGet-pakketverwijzingen toe
  • Maakt appxmanifest.xml en Assets map voor uw app-identiteit

Opmerking

In tegenstelling tot systeemeigen/C++-projecten maakt de .NET flow niet een bestand winapp.yaml. NuGet-pakketten worden rechtstreeks beheerd via uw .csproj. Gebruik dotnet restore deze functie om pakketten te herstellen na het klonen.

Debuggen met identiteit

  1. Bouw het uitvoerbare bestand:

    dotnet build -c Debug
    
  2. Debug-identiteit toepassen

    winapp create-debug-identity .\bin\Debug\net10.0-windows10.0.26100.0\dotnet-app.exe
    
  3. Voer het uitvoerbare bestand uit (gebruik dotnet run dit niet omdat het opnieuw kan worden opgebouwd):

    .\bin\Debug\net10.0-windows10.0.26100.0\dotnet-app.exe
    

U ziet het volgende:

Package Family Name: dotnet-app_12345abcde

Foutopsporingsidentiteit automatiseren (optioneel)

Voeg dit doel toe aan uw .csproj bestand:

<Target Name="ApplyDebugIdentity" AfterTargets="Build" Condition="'$(Configuration)' == 'Debug'">
    <Exec Command="winapp create-debug-identity &quot;$(TargetDir)$(TargetName).exe&quot;"
          WorkingDirectory="$(ProjectDir)"
          IgnoreExitCode="false" />
</Target>

6. Windows App SDK gebruiken

Als u winapp init hebt uitgevoerd, is Microsoft.WindowsAppSDK al als een NuGet-pakketverwijzing toegevoegd. Werk Program.cs bij zodat het de Windows App Runtime-API gebruikt.

using Windows.ApplicationModel;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            var package = Package.Current;
            var familyName = package.Id.FamilyName;
            Console.WriteLine($"Package Family Name: {familyName}");

            var runtimeVersion = Microsoft.Windows.ApplicationModel.WindowsAppRuntime.RuntimeInfo.AsString;
            Console.WriteLine($"Windows App Runtime Version: {runtimeVersion}");
        }
        catch (InvalidOperationException)
        {
            Console.WriteLine("Not packaged");
        }
    }
}

7. Pakket met MSIX

  1. Build voor release:

    dotnet build -c Release
    
  2. Een ontwikkelingscertificaat genereren:

    winapp cert generate --if-exists skip
    
  3. Pakket en teken:

    winapp pack .\bin\Release\net10.0-windows10.0.26100.0 --manifest .\appxmanifest.xml --cert .\devcert.pfx
    
  4. Installeer het certificaat (als beheerder uitvoeren):

    winapp cert install .\devcert.pfx
    
  5. Installeer door te dubbelklikken op het gegenereerde .msix bestand.

Aanbeveling

  • De Microsoft Store ondertekent de MSIX voor u. U hoeft de MSIX niet te ondertekenen voordat u deze inzendt.
  • Mogelijk hebt u afzonderlijke MSIX-pakketten nodig voor elke architectuur: dotnet build -c Release -r win-x64 of dotnet build -c Release -r win-arm64.

MSIX-pakketten automatiseren (optioneel)

Voeg dit doel toe aan uw .csproj:

<Target Name="PackageMsix" AfterTargets="Build" Condition="'$(Configuration)' == 'Release'">
    <Exec Command="winapp pack &quot;$(TargetDir.TrimEnd('\'))&quot; --cert &quot;$(ProjectDir)devcert.pfx&quot;"
          WorkingDirectory="$(ProjectDir)"
          IgnoreExitCode="false" />
</Target>