Freigeben über


Verwenden der winapp CLI mit .NET

Hinweis

Dieses Handbuch funktioniert für die meisten .NET project Typen. Die Schritte wurden sowohl mit Konsolen- als auch ui-basierten Projekten wie WPF getestet.

In diesem Handbuch wird veranschaulicht, wie Sie die winapp CLI mit einer .NET Anwendung zum Debuggen mit Paketidentität und Verpacken Ihrer Anwendung als MSIX verwenden.

Die Paketidentität ist ein Kernkonzept im Windows app-Modell. Sie ermöglicht Ihrer Anwendung den Zugriff auf bestimmte Windows-APIs (z. B. Benachrichtigungen, Sicherheit, KI-APIs usw.), eine einfache Installation/Deinstallation und vieles mehr.

Voraussetzungen

  1. .NET SDK: Installieren Sie das .NET SDK:

    winget install Microsoft.DotNet.SDK.10 --source winget
    
  2. winapp CLI: Installieren Sie das winapp Tool über winget:

    winget install Microsoft.winappcli --source winget
    

1. Erstellen einer neuen .NET App

Erstellen Sie zunächst eine einfache .NET Konsolenanwendung:

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

Führen Sie sie aus, um sicherzustellen, dass alles funktioniert:

dotnet run

2. Aktualisieren von Code zum Überprüfen der Identität

Aktualisieren Sie zunächst Ihre project-Datei auf eine bestimmte Windows SDK-Version. Öffnen Sie dotnet-app.csproj und ändern Sie das TargetFramework.

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

Ersetzen Sie nun den Inhalt von 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. Ohne Identität ausführen

dotnet run

Es sollte "Nicht verpackt" angezeigt werden.

4. Initialisiere das Projekt mit winapp CLI

Der Befehl winapp init erkennt automatisch .csproj-Dateien und führt ein .NET-spezifisches Setup aus:

winapp init

Wenn Sie dazu aufgefordert werden:

  • Paketname: Drücken Sie die EINGABETASTE, um die Standardeinstellung zu akzeptieren.
  • Publisher Name: Drücken Sie die EINGABETASTE, um die Standardeinstellung zu akzeptieren oder Ihren Namen einzugeben.
  • Beschreibung: Drücken Sie die EINGABETASTE, um die Standardeinstellung zu akzeptieren oder eine Beschreibung einzugeben.
  • Version: Drücken Sie die EINGABETASTE, um 1.0.0.0 zu akzeptieren.
  • Einstiegspunkt: Drücken Sie die EINGABETASTE, um die Standardeinstellung zu übernehmen (dotnet-app.exe)
  • Windows App SDK-Setup: Wählen Sie Stabil, Vorschau oder Experimentell

Dieser Befehl:

  • Aktualisiert TargetFramework in Ihrem .csproj auf ein unterstütztes Windows TFM (falls erforderlich)
  • Addiert Microsoft.WindowsAppSDK und Microsoft.Windows.SDK.BuildTools NuGet-Paketverweise
  • Erstellt appxmanifest.xml und Assets Ordner für Ihre App-Identität

Hinweis

Im Gegensatz zu nativen/C++-Projekten erstellt der .NET-Ablauf nicht eine winapp.yaml Datei. NuGet-Pakete werden direkt über Ihre .csproj. Verwenden Sie dotnet restore, um Pakete nach dem Klonen wiederherzustellen.

5. Debuggen mit Identität

  1. Erstellen Sie die ausführbare Datei:

    dotnet build -c Debug
    
  2. Debugidentität anwenden:

    winapp create-debug-identity .\bin\Debug\net10.0-windows10.0.26100.0\dotnet-app.exe
    
  3. Führen Sie die ausführbare Datei aus (nicht verwenden dotnet run , da sie neu erstellt werden kann):

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

Sie sollten Folgendes sehen:

Package Family Name: dotnet-app_12345abcde

Automatisieren der Debugidentität (optional)

Fügen Sie dieses Ziel Ihrer .csproj-Datei hinzu.

<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. Verwenden von Windows App SDK

Wenn Sie winapp init ausgeführt haben, wurde Microsoft.WindowsAppSDK bereits als NuGet-Paketreferenz hinzugefügt. Aktualisieren Sie Program.cs, um die Windows App-Runtime-API zu verwenden:

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 mit MSIX

  1. Build für Release:

    dotnet build -c Release
    
  2. Generieren eines Entwicklungszertifikats:

    winapp cert generate --if-exists skip
    
  3. Packen und Signieren:

    winapp pack .\bin\Release\net10.0-windows10.0.26100.0 --manifest .\appxmanifest.xml --cert .\devcert.pfx
    
  4. Installieren Sie das Zertifikat (als Administrator ausführen):

    winapp cert install .\devcert.pfx
    
  5. Installieren Sie , indem Sie auf die generierte .msix Datei doppelklicken.

Tipp

  • Der Microsoft Store signiert das MSIX für Sie, sodass Sie es nicht vor der Übermittlung signieren müssen.
  • Möglicherweise benötigen Sie separate MSIX-Pakete für jede Architektur: dotnet build -c Release -r win-x64 oder dotnet build -c Release -r win-arm64.

Automatisieren von MSIX-Verpackungen (optional)

Fügen Sie dieses Ziel zu Ihrem .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>