Compartir a través de


Uso de la CLI de winapp con .NET

Nota:

Esta guía funciona para la mayoría de los tipos de .NET project. Los pasos se han probado con proyectos basados en la consola y en la interfaz de usuario, como WPF.

En esta guía se muestra cómo usar la CLI de winapp con una aplicación de .NET para realizar depuración con la identidad del paquete y empaquetar tu aplicación en un MSIX.

La identidad del paquete es un concepto básico en el modelo de Windows app. Permite a tu aplicación acceder a APIs específicas de Windows (como notificaciones, seguridad, APIs de IA, etc.), tener una experiencia de instalación y desinstalación limpia, etc.

Prerrequisitos

  1. .NET SDK: Instale el SDK de .NET:

    winget install Microsoft.DotNet.SDK.10 --source winget
    
  2. CLI de winapp: instale la winapp herramienta mediante winget:

    winget install Microsoft.winappcli --source winget
    

1. Crear una nueva aplicación de .NET

Empiece por crear una aplicación de consola de .NET sencilla:

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

Ejecútelo para asegurarse de que todo funciona:

dotnet run

2. Actualización del código para comprobar la identidad

En primer lugar, actualice el archivo project para tener como destino una versión específica de Windows SDK. Abra dotnet-app.csproj y cambie :TargetFramework

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

Ahora reemplace el contenido 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. Ejecutar sin identidad

dotnet run

Debería ver "No empaquetado".

4. Inicie el proyecto con la CLI de winapp

El comando detecta automáticamente archivos />

winapp init

Cuando se le solicite,

  • Nombre del paquete: presione Entrar para aceptar el valor predeterminado.
  • Nombre del editor: Presione Intro para aceptar el valor predeterminado o escriba su nombre.
  • Descripción: presione Entrar para aceptar el valor predeterminado o escriba una descripción.
  • Versión: presione Entrar para aceptar 1.0.0.0.
  • Punto de entrada: presione Entrar para aceptar el valor predeterminado (dotnet-app.exe)
  • Windows App SDK configuración: Seleccione Estable, Versión preliminar o Experimental

Este comando:

  • Actualiza el TargetFramework en tu .csproj a un TFM de Windows compatible (si es necesario)
  • Agrega Microsoft.WindowsAppSDK y Microsoft.Windows.SDK.BuildTools referencias de paquetes NuGet
  • Crea la carpeta appxmanifest.xml y Assets para la identidad de tu aplicación

Nota:

A diferencia de los proyectos nativos o de C++, el flujo de .NET no crea un archivo winapp.yaml. Los paquetes NuGet se administran directamente a través de .csproj. Use dotnet restore para restaurar paquetes después de la clonación.

5. Depurar con identidad

  1. Compile el archivo ejecutable:

    dotnet build -c Debug
    
  2. Aplicar la identidad de depuración:

    winapp create-debug-identity .\bin\Debug\net10.0-windows10.0.26100.0\dotnet-app.exe
    
  3. Ejecute el archivo ejecutable (no utilice dotnet run ya que podría reconstruir):

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

Debería ver lo siguiente:

Package Family Name: dotnet-app_12345abcde

Automatizar identidad de depuración (opcional)

Agregue este destino al .csproj archivo:

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

Si ejecutó winapp init, Microsoft.WindowsAppSDK ya se agregó como referencia de paquete NuGet. Actualice Program.cs para usar la API de 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. Paquete con MSIX

  1. Compilación para lanzamiento:

    dotnet build -c Release
    
  2. Genere un certificado de desarrollo:

    winapp cert generate --if-exists skip
    
  3. Empaquetar y firmar:

    winapp pack .\bin\Release\net10.0-windows10.0.26100.0 --manifest .\appxmanifest.xml --cert .\devcert.pfx
    
  4. Instale el certificado (ejecute como administrador):

    winapp cert install .\devcert.pfx
    
  5. Instale haciendo doble clic en el archivo generado .msix .

Sugerencia

  • La Microsoft Store firma el MSIX por ti, no es necesario firmar antes de la submisión.
  • Es posible que necesite paquetes MSIX independientes para cada arquitectura: dotnet build -c Release -r win-x64 o dotnet build -c Release -r win-arm64.

Automatización del empaquetado MSIX (opcional)

Agregue este objetivo a .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>