Guía de implementación del SDK de aplicaciones de Windows para aplicaciones independientes

Un proyecto de Windows App SDK depende del marco de forma predeterminada. Para cambiar a la implementación independiente, siga los pasos siguientes (los términos dependientes del marco de trabajo y autocontenida se describen en Introducción a la implementación de Windows App SDK).

  • En Visual Studio, haga clic con el botón derecho en el nodo del proyecto de aplicación y haga clic en Editar archivo de proyecto para abrir el archivo de proyecto de aplicación para su edición. Para un proyecto de C++, haga clic primero en Descargar proyecto.
  • En el archivo del proyecto de aplicación, dentro del elemento principal PropertyGroup, agregue <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained> como se muestra en la captura de pantalla siguiente.

Screenshot showing the WindowsAppSDKSelfContained property set in a project file.

  • En el caso de los proyectos empaquetados, en el archivo del proyecto de aplicación, al final del archivo antes del cierre </Project>, agregue el Target que se muestra a continuación.
  <Target Name="_RemoveFrameworkReferences" BeforeTargets="_ConvertItems;_CalculateInputsForGenerateCurrentProjectAppxManifest">
    <ItemGroup>
      <FrameworkSdkReference Remove="@(FrameworkSdkReference)" Condition="$([System.String]::Copy('%(FrameworkSdkReference.SDKName)').StartsWith('Microsoft.WindowsAppRuntime.'))" />
    </ItemGroup>
  </Target>

Nota:

Se trata de una solución alternativa para un error en Windows App SDK 1.1 y no será necesario con Windows App SDK 1.2. Solo es necesario para los proyectos empaquetados.

  • Guarda y cierra el archivo de proyecto.
  • Haga clic en Volver a cargar proyecto.
  • Si usa un proyecto de empaquetado de aplicaciones de Windows (en lugar del MSIX de un solo proyecto que obtiene con aplicación en blanco, empaquetado (WinUI 3 en escritorio)), realice también todos los cambios anteriores en el archivo de proyecto para el proyecto de empaquetado.

Nota:

No se deben cambiar los proyectos de biblioteca. La implementación independiente solo debe configurarse en proyectos de aplicación (y, si procede, en un proyecto de empaquetado de aplicaciones de Windows).

Para aplicaciones de ejemplo, consulte Ejemplos de implementación autocontenida del SDK de aplicaciones de Windows.

Después de establecer la WindowsAppSDKSelfContained propiedad true en en el archivo del proyecto, el contenido del paquete de Windows App SDK Framework se extraerá en la salida de la compilación e implementará como parte de la aplicación.

Nota:

Las aplicaciones .NET deben publicarse como independientes , así como ser totalmente independientes. Consulte este ejemplo para configurar .NET autocontenida con perfiles de publicación. dotnet publish aún no se admite con Windows App SDK 1.1.

Nota:

Las aplicaciones de C++ deben usar el CRT híbrido para ser totalmente independiente. La importación de HybridCRT.props desde Directory.Build.props es la manera recomendada de configurarla para todos los proyectos de una solución (vea un ejemplo en Directory.Build.props). Una aplicación empaquetada también debe establecerse <UseCrtSDKReferenceStaticWarning>false</UseCrtSDKReferenceStaticWarning> en su archivo de proyecto. Consulte la aplicación de ejemplo de implementación independiente para obtener información sobre cómo usar CRT híbrido.

Si la aplicación está empaquetada (para obtener más información, consulta Introducción a la implementación), las dependencias de Windows App SDK se incluirán como contenido dentro del paquete MSIX. La implementación de la aplicación todavía requiere registrar el paquete MSIX como cualquier otra aplicación empaquetada.

Si la aplicación está empaquetada con ubicación externa o desempaquetada, las dependencias de Windows App SDK se copian junto a en la .exe salida de la compilación. Puede implementar xcopy-deploy los archivos resultantes o incluirlos en un instalador personalizado.

Dependencias de paquetes MSIX adicionales

Un pequeño número de API del SDK de aplicaciones de Windows se basa en paquetes MSIX adicionales que representan la funcionalidad crítica del sistema operativo (SO).

Esto significa que si quiere usar esas API en una aplicación independiente, tiene las siguientes opciones:

  1. Puede hacer que la funcionalidad sea opcional y encenderla solo si es posible y siempre que sea posible. Llamar al método IsSupported de las API (PushNotificationManager.IsSupported y AppNotificationManager.IsSupported) le permitirá comprobar dinámicamente en tiempo de ejecución si las API están disponibles para la aplicación que realiza la llamada en el sistema en el que se ejecuta.
    • Esto permite el uso seguro, condicional y opcional de las API sin poner en peligro la simplicidad de la implementación independiente.
    • Solo si los servicios del sistema operativo están instalados fuera de la implementación de la aplicación, la aplicación iluminará la funcionalidad adecuada. Pero, de hecho, hay algunos casos en los que las API funcionarán incluso sin que el paquete Singleton esté presente; por lo tanto, llamar a IsSupported para comprobar suele ser una buena idea.
  2. Implemente los paquetes MSIX necesarios como parte de la instalación de la aplicación.
    • Esto le permite depender de la API en todos los escenarios. Pero requerir la implementación de paquetes MSIX de dependencias como parte de la implementación de la aplicación puede poner en peligro la simplicidad de la implementación autocontenida.
  3. No use la API.
    • Considere las API alternativas que proporcionan una funcionalidad similar sin requisitos de implementación adicionales.

No participar (o en) compatibilidad automática con UndockedRegFreeWinRT

La propiedad del proyecto WindowsAppSdkUndockedRegFreeWinRTInitialize se introdujo en la versión 1.2 del SDK de aplicaciones de Windows (desde el canal estable). Si esa propiedad se establece en true , garantiza que la implementación del SDK de aplicaciones de Windows de Windows de windows de Windows Runtime (UndockedRegFreeWinRT) esté habilitada automáticamente en el inicio de la aplicación. Esa compatibilidad es necesaria para aplicaciones independientes desempaquetadas.

WindowsAppSdkUndockedRegFreeWinRTInitialize tiene como valor true si WindowsAppSDKSelfContained es true y WindowsPackageType es None y (a partir de la versión 1.2 del SDK de aplicaciones de Windows) la propiedad del proyecto OutputType se establece en Exe o WinExe (es decir, el proyecto genera un ejecutable). Esa última condición es evitar la adición automática de compatibilidad de UndockedRegFreeWinRT en archivos DLL de biblioteca de clases y otros archivos no ejecutables de forma predeterminada. Si necesita compatibilidad automática con UndockedRegFreeWinRT en un archivo no ejecutable (por ejemplo, un archivo DLL de prueba cargado por un ejecutable de proceso de host que no inicialice UndockedRegFreeWinRT), puede habilitarlo explícitamente en el proyecto con <WindowsAppSdkUndockedRegFreeWinRTInitialize>true</WindowsAppSdkUndockedRegFreeWinRTInitialize>.