Använda winapp CLI med .NET

Anmärkning

Den här guiden fungerar för de flesta .NET project typer. Stegen har testats med både konsol- och gränssnittsbaserade projekt som WPF.

Den här guiden visar hur du använder winapp CLI med ett .NET-program för att felsöka med paketidentitet och paketera ditt program som en MSIX.

Paketidentitet är ett grundläggande begrepp i Windows app modellen. Det gör att ditt program kan access specifika Windows-API:er (t.ex. meddelanden, säkerhet, AI-API:er osv.), har en ren installation/avinstallation med mera.

Förutsättningar

  1. .NET SDK: Installera .NET SDK:

    winget install Microsoft.DotNet.SDK.10 --source winget
    
  2. winapp CLI: Installera winapp verktyget via winget:

    winget install Microsoft.winappcli --source winget
    

1. Skapa en ny .NET app

Börja med att skapa ett enkelt .NET konsolprogram:

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

Kör den för att kontrollera att allt fungerar:

dotnet run

2. Uppdatera koden för att kontrollera identiteten

Uppdatera först din project-fil för att rikta in dig på en specifik Windows SDK-version. Öppna dotnet-app.csproj och ändra TargetFramework:

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

Ersätt nu innehållet i 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. Kör utan identitet

dotnet run

Du bör se "Inte paketerad".

4. Initiera project med winapp CLI

Kommandot winapp init identifierar automatiskt .csproj-filer och kör en .NET specifik konfiguration:

winapp init

När du uppmanas att göra det:

  • Paketnamn: Tryck på Retur för att acceptera standardinställningen
  • Utgivarens namn: Tryck på Enter för att acceptera standardvärdet eller ange ditt namn
  • Beskrivning: Tryck på Retur för att acceptera standardvärdet eller ange en beskrivning
  • Version: Tryck på Retur för att acceptera 1.0.0.0
  • Startpunkt: Tryck på Retur för att acceptera standardinställningen (dotnet-app.exe)
  • Windows App SDK installation: Välj Stabil, Förhandsgranskning eller Experimentell

Det här kommandot:

  • Uppdaterar TargetFramework i din .csproj till en Windows TFM som stöds (om så behövs)
  • Lägg till Microsoft.WindowsAppSDK och Microsoft.Windows.SDK.BuildTools NuGet-paketreferenser
  • Skapar appxmanifest.xml och Assets mappar för din appidentitet

Anmärkning

I motsats till interna/C++-projekt skapar .NET-processen inte en winapp.yaml-fil. NuGet-paket hanteras direkt via din .csproj. Använd dotnet restore för att återställa paket efter kloning.

5. Felsöka med identitet

  1. Skapa den körbara filen:

    dotnet build -c Debug
    
  2. Använd felsökningsidentitet:

    winapp create-debug-identity .\bin\Debug\net10.0-windows10.0.26100.0\dotnet-app.exe
    
  3. Kör den körbara filen (använd inte dotnet run eftersom det kan återskapas):

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

Du bör se:

Package Family Name: dotnet-app_12345abcde

Automatisera felsökningsidentitet (valfritt)

Lägg till det här målet i .csproj filen:

<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. Använda Windows App SDK

Om du körde winapp inithar Microsoft.WindowsAppSDK redan lagts till som en NuGet-paketreferens. Uppdatera Program.cs för att använda api:et Windows App Runtime:

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. Paket med MSIX

  1. Skapa för lansering:

    dotnet build -c Release
    
  2. Generera ett utvecklingscertifikat:

    winapp cert generate --if-exists skip
    
  3. Paketera och signera:

    winapp pack .\bin\Release\net10.0-windows10.0.26100.0 --manifest .\appxmanifest.xml --cert .\devcert.pfx
    
  4. Installera certifikatet (kör som administratör):

    winapp cert install .\devcert.pfx
    
  5. Installera genom att dubbelklicka på den genererade .msix filen.

Tips/Råd

  • Microsoft Store signerar MSIX åt dig, du behöver inte signera innan det skickas in.
  • Du kan behöva separata MSIX-paket för varje arkitektur: dotnet build -c Release -r win-x64 eller dotnet build -c Release -r win-arm64.

Automatisera MSIX-paketering (valfritt)

Lägg till detta målobjekt till din .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>