Publicación de una aplicación de .NET MAUI sin empaquetar para Windows con 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.

Configuración de las opciones de compilació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 '$(RuntimeIdentifierOverride)' != ''">
    <RuntimeIdentifier>$(RuntimeIdentifierOverride)</RuntimeIdentifier>
</PropertyGroup>

En <PropertyGroup> el ejemplo se requiere para solucionar un error en el SDK de aplicaciones para Windows. 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.
-p:WindowsPackageType El tipo de paquete, que es None para aplicaciones sin empaquetar.
-p:WindowsAppSDKSelfContained El modo de implementación de tu aplicación, que puede depender del marco o ser independiente. Este valor debe ser true para aplicaciones independientes. Para obtener más información sobre las aplicaciones dependientes del marco y las aplicaciones independientes, consulta Información general de la implementación de SDK de aplicaciones para Windows.

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 -p:WindowsPackageType=None

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 la aplicación, copiando el ejecutable en la carpeta bin\Release\net8.0-windows10.0.19041.0\win10-x64\publish. En esta carpeta, hay un archivo exe y esa es la aplicación compilada. Esta aplicación se puede iniciar o toda la carpeta se puede copiar en otra máquina e iniciarla allí.

Una distinción importante de una aplicación empaquetada es que esto no incluirá el tiempo de ejecución de .NET en la carpeta. Esto significa que la aplicación requerirá que el entorno de ejecución de .NET se instale primero en las máquinas que finalmente ejecutarán la aplicación. Para garantizar que la aplicación también contiene todos los componentes de tiempo de ejecución, se puede proporcionar el argumento -p:WindowsAppSDKSelfContained en la publicación. Por ejemplo:

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

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