20 Eylül 2026 Pazar

Publicación de juegos de escritorio MonoGame en Microsoft Store: Guía completa de MSIX y WAP




Publicación de juegos de escritorio MonoGame en Microsoft Store: Guía completa de MSIX y WAP

Llevar un juego indie a la Microsoft Store en Windows 10 y Windows 11 ofrece a los desarrolladores acceso directo a cientos de millones de jugadores de PC, actualizaciones automáticas en segundo plano, integración con la barra de juegos de Windows y la seguridad de una instalación en contenedor. Sin embargo, si tu juego está creado con MonoGame (.NET 8.0 o .NET 9.0 WindowsDX), publicarlo requiere un puente arquitectónico: conectar un ejecutable Win32 estándar (.exe) con el moderno modelo de aplicaciones MSIX / AppX.

En Arar Games, hemos recorrido este camino con títulos como Paint Trek y Blocked: Pixel Panzer, desde la primera compilación hasta la publicación en tienda. En esta guía técnica, desglosamos todo el proceso: configuración de proyectos, opciones del menú Publish en Visual Studio, configuración de Package.appxmanifest, escalado de iconos y tiles, resolución de errores de WACK y envío final a Microsoft Partner Center.


1. Fundamentos arquitectónicos: Win32 frente a MSIX

Los juegos MonoGame tradicionales se compilan en un ejecutable Win32 estándar acompañado de bibliotecas .dll y una carpeta Content/ con recursos binarios comprimidos (texturas .xnb, audio .ogg, shaders HLSL).

Empaquetar el juego mediante un proyecto Windows Application Packaging (WAP) para generar un MSIX bundle aporta ventajas esenciales:

  1. Ciclo de vida aislado en contenedor: Las aplicaciones MSIX se ejecutan de forma aislada. Al desinstalarse, se eliminan por completo todos los archivos y entradas de registro virtualizadas sin dejar residuos en el sistema.
  2. Distribución dinámica y descargas optimizadas: Un único paquete .appxupload combina binarios x86 y x64 junto con paquetes de escala DPI (scale-100 a scale-400). La tienda solo descarga en el equipo del usuario los archivos necesarios.
  3. Telemetría de errores automática: Visual Studio incluye símbolos de depuración (.appxsym). Si el juego falla, el panel de Partner Center muestra la traza de la pila (stack trace) completa con nombres de métodos y números de línea.

2. Estructura y configuración del proyecto

En el archivo .csproj del juego de escritorio, habilita la compatibilidad con múltiples plataformas y la copia de contenido:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net9.0-windows</TargetFramework>
    <UseWindowsForms>true</UseWindowsForms>
    <Platforms>AnyCPU;x64;x86</Platforms>
  </PropertyGroup>
  <ItemGroup>
    <Content Include="Content\**\*.*">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
</Project>

Restaura los paquetes NuGet para ambas arquitecturas:

dotnet restore YourGame.Desktop.csproj -r win-x64
dotnet restore YourGame.Desktop.csproj -r win-x86

3. Opciones del menú Publish en Visual Studio

Al hacer clic derecho en el proyecto WAP y abrir Publish, encontrarás tres opciones:

  1. Associate App with the Store...: Conecta el proyecto con tu cuenta de Partner Center, obtiene el Publisher ID oficial y genera Package.StoreAssociation.xml.
  2. Convert Content Group Map File: Conversión para instalaciones en streaming en juegos de gran tamaño (+50 GB). No es necesario para juegos indie.
  3. Create App Packages...: Asistente principal para generar paquetes de prueba local (Sideloading) o el paquete final para la tienda (_bundle.appxupload).

4. Configuración del asistente de empaquetado

  • Método de distribución: Selecciona "Microsoft Store under a new or existing app name" para la tienda o "Sideloading" para pruebas en equipos locales.
  • Arquitecturas: Marca ☑️ x86 y ☑️ x64 (configuración Release).
  • Bundle: Selecciona Generate app bundle: Always.
  • Regla de versión: Formato Major.Minor.Build.Revision (ej. 1.0.0.0). Cualquier nuevo paquete subido a la tienda debe tener una versión superior a la actualmente activa. La opción Automatically increment aumenta automáticamente la revisión.

5. Parámetros clave de Package.appxmanifest

  • <rescap:Capability Name="runFullTrust" />: Al requerir DirectX 11 y llamadas nativas, este permiso otorga acceso completo de escritorio manteniendo la limpieza del contenedor MSIX.
  • InitialRotationPreference="landscape": Fija la orientación horizontal, indispensable para dispositivos portátiles con Windows (ASUS ROG Ally, Lenovo Legion Go).

Warning

Requisito para BadgeLogo: El icono de la pantalla de bloqueo (BadgeLogo) debe estar formado exclusivamente por píxeles blancos puros (#FFFFFF) sobre fondo transparente. Incluir colores provocará un fallo de contraste en el test de certificación WACK.


7. Pruebas WACK y resolución de problemas

  • Error "AppCert.exe wasn't found": Instala el componente Windows App Certification Kit desde Visual Studio Installer. La prueba local es opcional, ya que Microsoft ejecuta estos análisis automáticamente al subir el paquete a la nube.
  • Falsos positivos en archivos de MonoGame: Archivos binarios .xnb o .ogg pueden coincidir aleatoriamente con firmas de encabezados PE. Microsoft los reconoce como recursos estáticos del juego y aprueba la publicación.

8. Pruebas locales con Sideloading

En la carpeta AppPackages/YourGame_Test/, abre PowerShell como administrador y ejecuta:

Set-ExecutionPolicy RemoteSigned -Scope Process
.\Add-AppDevPackage.ps1

9. Lista de control de Microsoft Partner Center

  1. Pricing and availability: Selecciona todos los mercados (240 países) y define el precio base en USD.
  2. Properties: Clasifica el juego en Games e incluye el enlace a tu Política de Privacidad.
  3. Age ratings: Completa el formulario de IARC (los juegos arcade suelen recibir Everyone / PEGI 3).
  4. Store listings: Sube capturas de pantalla de PC en 1920x1080 (sin botones táctiles móviles).
  5. Packages: Sube el archivo _bundle.appxupload y haz clic en Submit to the Store.



Hiç yorum yok:

Yorum Gönder