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.
Abre un terminal de PowerShell y ve al directorio del proyecto.
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ámetroFriendlyName
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}")
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
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:
Observa que en la imagen anterior, el editor era "desconocido".
Para confiar en el certificado del paquete de aplicación, haz lo siguiente:
Haz clic en el archivo .msix y selecciona Propiedades.
Selecciona la pestaña Firmas digitales.
Elige el certificado y presiona Detalles.
Selecciona Ver certificado.
Selecciona Instalar certificado....
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 Sí.
En la ventana Asistente para importación de certificados, selecciona Colocar todos los certificados en el siguiente almacén.
Selecciona Examinar... y, luego, elige el almacén Personas de confianza. Seleccione Aceptar para cerrar el cuadro de diálogo.
Seleccione Next (Siguiente) y Finish (Finalizar). Deberías ver un cuadro de diálogo como este: La importación se ha realizado correctamente.
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:
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.