Publicación de una aplicación empaquetada .NET MAUI para Windows mediante la CLI

Al distribuir tu aplicación de .NET Multi-platform App UI (.NET MAUI) para Windows, puedes publicar la aplicación y sus dependencias en una carpeta para la implementación en otro sistema. También puedes empaquetar la aplicación en un paquete MSIX, que tiene numerosas ventajas para los usuarios que instalan la aplicación. Para obtener más información sobre las ventajas de usar MSIX, consulta ¿Qué es MSIX?

Creación de un certificado de firma

Debes usar un certificado de firma para la publicación de la aplicación. Este certificado se usa para firmar el paquete MSIX. En los siguientes pasos aprenderás a crear e instalar un certificado autofirmado mediante PowerShell.

Nota:

Al crear y usar un certificado autofirmado, solo los usuarios que instalan y confían en el certificado pueden ejecutar la aplicación. Es fácil de implementar para las pruebas, pero puede impedir que otros usuarios instalen la aplicación. Cuando estés listo para publicar la aplicación, te recomendamos usar un certificado emitido por una fuente de confianza. Este sistema de confianza centralizada ayuda a garantizar que el ecosistema de aplicaciones tenga niveles de comprobación para proteger a los usuarios de actores malintencionados.

  1. Abre un terminal de PowerShell y ve al directorio del proyecto.

  2. Para generar un certificado autofirmado, usa el comando New-SelfSignedCertificate.

    El valor de <PublisherName> se muestra al usuario cuando instala la aplicación, proporciona tu propio valor y omite los caracteres < >. Puedes establecer el parámetro FriendlyName en cualquier cadena de texto.

    New-SelfSignedCertificate -Type Custom `
                              -Subject "CN=<PublisherName>" `
                              -KeyUsage DigitalSignature `
                              -FriendlyName "My temp dev cert" `
                              -CertStoreLocation "Cert:\CurrentUser\My" `
                              -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")
    
  3. Usa el siguiente comando de PowerShell para consultar el certificado que se ha creado en el almacén de certificados:

    Get-ChildItem "Cert:\CurrentUser\My" | Format-Table Thumbprint, Subject, FriendlyName
    

    Debería ver resultados similares a lo siguiente:

    Thumbprint                               Subject                                  FriendlyName
    ----------                               -------                                  ------------
    DE8B962E7BF797CB48CCF66C8BCACE65C6585E2F CN=1f23fa36-2a2f-475e-a69e-3a14fe56ed4
    A6CA34FD0BA6B439787391F51C87B1AD0C9E7FAE CN=someone@microsoft.com
    94D93DBC97D4F7E4364A215F15C6ACFEFC71E569 CN=localhost                             ASP.NET Core HTTPS development certificate
    F14211566DACE867DA0BF9C2F9C47C01E3CF1D9B CN=john
    568027317BE8EE5E6AACDE5079D2DE76EC46EB88 CN=e1f823e2-4674-03d2-aaad-21ab23ad84ae
    DC602EE83C95FEDF280835980E22306067EFCA96 CN=John Smith, OU=MSE, OU=Users, DC=com
    07AD38F3B646F5AAC16F2F2570CAE40F4842BBE0 CN=Contoso                               My temp dev cert
    
  4. La huella digital del certificado se usará más adelante, así que cópiala en el portapapeles. Es el valor de huella digital cuya entrada coincide con los campos Subject y FriendlyName del certificado.

Para obtener más información, consulta Creación de un certificado para firmas de paquete.

Configuración de las opciones de compilación del proyecto

El archivo de proyecto es un buen lugar para colocar la configuración de compilación específica de Windows. Te recomendamos no guardar algunas opciones de configuración, como contraseñas, en el archivo del proyecto. La configuración descrita en esta sección se puede pasar a la línea de comandos con el formato -p:name=value. Si la configuración ya está definida en el archivo del proyecto, una configuración que se pase a la línea de comandos anula la configuración del proyecto.

Agrega el siguiente nodo <PropertyGroup> al archivo del proyecto. Este grupo de propiedades solo se procesa cuando la plataforma de destino es Windows y la configuración se establece en Release. Esta sección de configuración se ejecuta cada vez que compilas o publicas en el modo Release.

<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(Configuration)' == 'Release'">
    <AppxPackageSigningEnabled>true</AppxPackageSigningEnabled>
    <PackageCertificateThumbprint>A10612AF095FD8F8255F4C6691D88F79EF2B135E</PackageCertificateThumbprint>
</PropertyGroup>
<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(RuntimeIdentifierOverride)' != ''">
    <RuntimeIdentifier>$(RuntimeIdentifierOverride)</RuntimeIdentifier>
</PropertyGroup>

Reemplaza el valor de propiedad <PackageCertificateThumbprint> por la huella digital del certificado que ya has generado. O bien, puedes quitar esta configuración del archivo del proyecto y proporcionarla en la línea de comandos. Por ejemplo: -p:PackageCertificateThumbprint=A10612AF095FD8F8255F4C6691D88F79EF2B135E.

El segundo <PropertyGroup> del ejemplo es necesario para solucionar un error en Windows SDK. Para obtener más información sobre el error, consulta Incidencia de WindowsAppSDK n.º 3337.

Publicar

Para publicar la aplicación, abre el terminal Símbolo del sistema para desarrolladores para VS 2022 y ve a la carpeta del proyecto de aplicación .NET MAUI. Ejecuta el comando dotnet publish con los parámetros siguientes:

Parámetro Valor
-f El marco de destino, que es net8.0-windows{version}. Este valor es un TFM de Windows, como net8.0-windows10.0.19041.0. Asegúrate de que este valor sea idéntico al valor del nodo <TargetFrameworks> de tu archivo .csproj.
-c La configuración de compilación, que es Release.
-p:RuntimeIdentifierOverride=win10-x64
- o -
-p:RuntimeIdentifierOverride=win10-x86
Evita el error detallado en la incidencia n.° 3337 de WindowsAppSDK. Elige la versión -x64 o -x86 del parámetro en función de la plataforma de destino.

Advertencia

El intento de publicar una solución de .NET MAUI tendrá como resultado que el comando dotnet publish intente publicar cada proyecto de la solución de forma individual, lo que puede causar problemas cuando hayas agregado otros tipos de proyecto a tu solución. Por lo tanto, el comando dotnet publish debe tener como ámbito el proyecto de aplicación .NET. MAUI.

Por ejemplo:

dotnet publish -f net8.0-windows10.0.19041.0 -c Release -p:RuntimeIdentifierOverride=win10-x64

Nota:

En .NET 8, el comando dotnet publish tiene como valor predeterminado la configuración Release. Por lo tanto, la configuración de compilación se puede omitir desde la línea de comandos.

La publicación compila y empaqueta la aplicación, copiando el paquete firmado en la carpeta bin\Release\net8.0-windows10.0.19041.0\win10-x64\AppPackages\<appname>\. <appname> es una carpeta que lleva el nombre del proyecto y la versión. En esta carpeta, hay un archivo msix que es el paquete de la aplicación.

Para más información sobre el comando dotnet publish, lee dotnet publish.

Instalación de la aplicación

Para instalar la aplicación, esta debe estar firmada con un certificado de confianza. Si no es así, Windows no te permitirá instalarla. Aparecerá un cuadro de diálogo similar a este, con el botón Instalar deshabilitado:

Installing an untrusted app.

Observa que en la imagen anterior, el editor era "desconocido".

Para confiar en el certificado del paquete de aplicación, haz lo siguiente:

  1. Haz clic en el archivo .msix y selecciona Propiedades.

  2. Selecciona la pestaña Firmas digitales.

  3. Elige el certificado y presiona Detalles.

    Properties pane of an MSIX file with the digital signatures tab selected.

  4. Selecciona Ver certificado.

  5. Selecciona Instalar certificado....

  6. Elige Equipo local y, luego, selecciona Siguiente.

    Si el Control de cuentas de usuario te pregunta lo siguiente: ¿Quieres permitir que esta aplicación realice cambios en el dispositivo?, selecciona .

  7. En la ventana Asistente para importación de certificados, selecciona Colocar todos los certificados en el siguiente almacén.

  8. Selecciona Examinar... y, luego, elige el almacén Personas de confianza. Seleccione Aceptar para cerrar el cuadro de diálogo.

    Certificate import wizard window is shown while selecting the Trusted People store.

  9. Seleccione Next (Siguiente) y Finish (Finalizar). Deberías ver un cuadro de diálogo como este: La importación se ha realizado correctamente.

    Certificate import wizard window with a successful import message.

  10. Selecciona Aceptar en cualquier ventana abierta como parte de este proceso, para cerrarlas todas.

Ahora, intenta volver a abrir el archivo de paquete para instalar la aplicación. Deberías ver un cuadro de diálogo similar al siguiente, con el editor mostrado correctamente:

Installing a trusted app.

Selecciona el botón Instalar si quieres instalar la aplicación.

Limitaciones actuales

En la lista siguiente se describen las limitaciones actuales en la publicación y el empaquetado:

  • La aplicación publicada no funciona si intentas ejecutarla directamente con el archivo ejecutable fuera de la carpeta de publicación.
  • La forma de ejecutar la aplicación es instalarla primero a través del archivo MSI empaquetado.