Partager via


Utilisation de l’interface CLI winapp avec .NET

Note

Ce guide fonctionne pour la plupart des types .NET project. Les étapes ont été testées avec des projets basés sur la console et l’interface utilisateur comme WPF.

Ce guide montre comment utiliser l’interface CLI winapp avec une application .NET pour déboguer avec l’identité de package et empaqueter votre application en tant que MSIX.

L’identité de package est un concept de base dans le modèle Windows app. Il permet à votre application d'accéder à des API Windows spécifiques (telles que les notifications, les API de sécurité, les API IA, etc.), d'avoir une expérience d'installation/désinstallation optimisée, et bien plus encore.

Prerequisites

  1. .NET SDK : installez le Kit de développement logiciel (SDK) .NET :

    winget install Microsoft.DotNet.SDK.10 --source winget
    
  2. CLI winapp : Installez l’outil winapp via winget :

    winget install Microsoft.winappcli --source winget
    

1. Créer une application .NET

Commencez par créer une application console .NET simple :

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

Exécutez-le pour vous assurer que tout fonctionne :

dotnet run

2. Mettre à jour le code pour vérifier l’identité

Tout d’abord, mettez à jour votre fichier project pour cibler une version spécifique du Kit de développement logiciel (SDK) Windows. Ouvrez dotnet-app.csproj et modifiez TargetFramework.

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

Remplacez maintenant le contenu de 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. Exécuter sans identité

dotnet run

Vous devez voir « Non empaqueté ».

4. Initialisez le projet avec l'outil CLI winapp

La commande winapp init détecte automatiquement les fichiers .csproj et exécute une configuration spécifique à .NET :

winapp init

Lorsque vous y êtes invité :

  • Nom du package : appuyez sur Entrée pour accepter la valeur par défaut
  • Publisher nom : appuyez sur Entrée pour accepter la valeur par défaut ou entrer votre nom
  • Description : Appuyez sur Entrée pour accepter la valeur par défaut ou entrer une description
  • Version : appuyez sur Entrée pour accepter la version 1.0.0.0
  • Point d’entrée : appuyez sur Entrée pour accepter la valeur par défaut (dotnet-app.exe)
  • Windows App SDK configuration : sélectionner stable, aperçu ou expérimental

Cette commande :

  • Met à jour le TargetFramework de votre .csproj vers un TFM Windows pris en charge (si nécessaire)
  • Ajoute les références de package NuGet Microsoft.WindowsAppSDK et Microsoft.Windows.SDK.BuildTools.
  • Crée les dossiers appxmanifest.xml et Assets pour l'identité de votre application

Note

Contrairement aux projets natifs/C++, le flux .NET ne crée pas un fichier winapp.yaml. Les packages NuGet sont gérés directement via votre .csproj. Permet dotnet restore de restaurer des packages après le clonage.

5. Déboguer avec l’identité

  1. Générez l’exécutable :

    dotnet build -c Debug
    
  2. Appliquer l’identité de débogage :

    winapp create-debug-identity .\bin\Debug\net10.0-windows10.0.26100.0\dotnet-app.exe
    
  3. Exécutez l'exécutable (n'utilisez pas dotnet run car il pourrait être reconstruit)

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

Vous devriez voir :

Package Family Name: dotnet-app_12345abcde

Automatisation de l'identité de debug (facultatif)

Ajoutez cette cible à votre .csproj fichier :

<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. Utilisation de Windows App SDK

Si vous avez exécuté winapp init, Microsoft.WindowsAppSDK a déjà été ajouté en tant que référence de package NuGet. Mettez à jour Program.cs pour utiliser l'API 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. Package avec MSIX

  1. Build pour la mise en production :

    dotnet build -c Release
    
  2. Générez un certificat de développement :

    winapp cert generate --if-exists skip
    
  3. Empaqueter et signer :

    winapp pack .\bin\Release\net10.0-windows10.0.26100.0 --manifest .\appxmanifest.xml --cert .\devcert.pfx
    
  4. Installez le certificat (exécuté en tant qu’administrateur) :

    winapp cert install .\devcert.pfx
    
  5. Installez en double-cliquant sur le fichier généré .msix .

Conseil / Astuce

  • Le Microsoft Store signe MSIX pour vous, il n’est pas nécessaire de vous connecter avant la soumission.
  • Vous pouvez avoir besoin de packages MSIX distincts pour chaque architecture : dotnet build -c Release -r win-x64 ou dotnet build -c Release -r win-arm64.

Automatisation de l’empaquetage MSIX (facultatif)

Ajoutez cette cible à votre .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>