Propiedades e inicializadores automáticos de Project

En este tema se describen las propiedades de project que puede establecer en el archivo de Visual Studio project (por ejemplo, .csproj o .vcxproj) para personalizar cómo se implementa la aplicación, incluida la configuración de inicializadores automáticos.

Inicializadores automáticos en el SDK de Aplicaciones para Windows

En el SDK de Aplicaciones para Windows, hay varias rutinas cuyo trabajo es asegurarse de que el entorno de ejecución de Aplicación de Windows se inicializa correctamente. Estas rutinas se conocen como inicializadores automáticos, ya que se ejecutan automáticamente antes del punto de entrada de la aplicación y realizan el trabajo de inicialización automáticamente.

Sugerencia

En caso de que tenga curiosidad sobre los detalles técnicos. En C++, se implementa un inicializador automático con un constructor de clase estática. En C#, se implementa un inicializador automático con un inicializador de módulo .NET. Es posible que a veces escuche el término inicializador del módulo cuando debería usarse el término adecuado inicializador automático.

Todos los inicializadores automáticos están habilitados condicionalmente de forma predeterminada, en función de la configuración de empaquetado e implementación de la aplicación. Estos son los detalles sobre ellos:

  • Inicializador automático del bootstrapper (también conocido como dependencias dinámicas). Este inicializador automático llama automáticamente a la API de arranque en el inicio de la aplicación. Es necesario para las aplicaciones sin empaquetar que dependen del marco de trabajo, con el fin de garantizar que Aplicación de Windows Runtime se añada al gráfico de paquetes de la aplicación. Para obtener información sobre las aplicaciones dependientes del framework (y autocontenidas), consulte Introducción al despliegue de SDK de Aplicaciones para Windows. Para obtener información sobre las aplicaciones desempaquetadas (y empaquetadas), consulta Aplicaciones de Windows: empaquetado, implementación y proceso.
    • En el caso de una aplicación empaquetada, no necesita el inicializador automático de dependencias de arranque o dinámicas porque el appxmanifest.xml archivo expresa la dependencia del marco. En el caso de una aplicación autónoma, no se necesita el inicializador automático del bootstrapper ni de las dependencias dinámicas, ya que estas aplicaciones no utilizan el marco de trabajo.
    • Puedes desactivar el iniciador automático del bootstrapper o de las dependencias dinámicas en tu archivo .csproj o .vcxproj mediante <WindowsAppSdkBootstrapInitialize>false</WindowsAppSdkBootstrapInitialize>.
  • Inicializador automático de Deployment Manager. Esto es necesario para las aplicaciones empaquetadas dependientes del marco que usan la funcionalidad main/singleton (por ejemplo, las notificaciones push), ya que el appxmanifest.xml archivo no puede expresar esas dependencias.
    • Para una aplicación autónoma, no es necesario el inicializador automático del Deployment Manager, ya que esas aplicaciones no admiten la funcionalidad de main/singleton.
    • Para obtener más información importante, consulte la sección Inicializador automático de Deployment Manager más adelante en este tema.
  • Inicializador automático de activación sin registro. Esto es necesario para que una aplicación autónoma utilice la activación de Windows Runtime (WinRT) sin registro y sin acoplamiento basada en el manifiesto (UndockedRegFreeWinRT), si la aplicación se ejecuta en un sistema operativo anterior a la Actualización de mayo de 2019 de Windows 10 (versión 1903; nombre en clave 19H1).
    • En el caso de las aplicaciones dependientes del marco de trabajo y de las aplicaciones autónomas destinadas a Windows 10, versión 1903 o posterior, no es necesario el autoinicializador de activación sin registro. Dichas aplicaciones pueden desactivarlo mediante <WindowsAppSdkUndockedRegFreeWinRTInitialize>false</WindowsAppSdkUndockedRegFreeWinRTInitialize>.
  • Inicializador automático de compatibilidad. Esto es necesario para que una aplicación utilice las funciones de contención A/B para controlar el comportamiento de las versiones de mantenimiento. Para obtener más información, consulte RuntimeCompatibilityOptions.
    • En el caso de las aplicaciones que no usan contención A/B (que es el valor predeterminado), no necesita el inicializador automático de compatibilidad.

Inicializador automático de Deployment Manager

Cuando se inicia una aplicación que usa el SDK de Aplicaciones para Windows 1.8 o posterior, el inicializador automático de Deployment Manager se ejecuta by default. Pero puedes optar por no participar en eso. En esta sección se explican las ventajas y advertencias de permitir que el inicializador automático de Deployment Manager se ejecute, y le ayuda a decidir si no participar.

Para que la aplicación use la funcionalidad en los paquetes Main/Singleton (por ejemplo, notificaciones push): 1. Debe usar la API de implementación para asegurarse de que esos paquetes se implementan (ya que los paquetes Main/Singleton no son marcos, pero paquetes "main", como aplicaciones; por lo tanto, no se pueden registrar como dependencias en el manifiesto appx de la aplicación. En su lugar, la API de implementación proporciona la funcionalidad para implementar esos paquetes). 2. Debido a 1), la aplicación debe inicializar el Deployment Manager haciendo que se invoque DeploymentManager.Initialize. La aplicación puede hacerlo de forma automática o explícita, como veremos. 3. Tu aplicación debe ser una aplicación empaquetada dependiente del marco de trabajo, de modo que dependa de los paquetes Main/Singleton.

Una manera de inicializar Deployment Manager es permitir que se ejecute el inicializador automático de Deployment Manager (consulte la sección Inicializadores automáticos en el SDK de Aplicaciones para Windows anteriormente en este tema). El inicializador automático de Deployment Manager llama a DeploymentManager.Initialize automáticamente. La otra manera de inicializar el Deployment Manager es que usted mismo llame explícitamente a DeploymentManager.Initialize.

Si su aplicación, utilizando SDK de Aplicaciones para Windows 1.8 o posterior, no necesita los paquetes Main/Singleton, entonces debería optar por no participar en el inicializador automático del Deployment Manager configurando la propiedad WindowsAppSdkDeploymentManagerInitialize en false en el archivo de proyecto de la aplicación.

Si su aplicación (utilizando la SDK de Aplicaciones para Windows 1.8 o posterior) necesita los paquetes Main/Singleton, entonces puede:

  • Permitir que el inicializador automático de Deployment Manager se ejecute (lo que hace de forma predeterminada),
  • O bien, puedes excluirte del iniciador automático de Deployment Manager estableciendo la propiedad WindowsAppSdkDeploymentManagerInitialize en false en el archivo de proyecto de tu aplicación A continuación, debe llamar explícitamente a DeploymentManager.Initialize usted mismo.

Importante

Para cualquier proceso que se ejecute en AppContainer, si hace que se llame a DeploymentManager.Initialize, la aplicación debe declarar la packageManagement en el manifiesto del paquete.

Propiedades de proyecto

En la tabla siguiente se muestran las propiedades que puedes establecer en el archivo project de la aplicación. Consulte la sección anterior (anterior) para obtener más información sobre los inicializadores automáticos en el SDK de Aplicaciones para Windows.

Nombre y descripción de la propiedad Valores Para obtener más información
AppxPackage. Especifica si una aplicación winUI está empaquetada o no. false (para una aplicación sin empaquetar) o ausente (para una aplicación empaquetada) Desempaquetar una aplicación WinUI
EnableMsixTooling. Habilita la característica MSIX de un solo proyecto para un proyecto. true (para habilitar) o ausente (para deshabilitar) Empaqueta tu aplicación utilizando MSIX de proyecto único
UseCrtSDKReferenceStaticWarning. Suprime la advertencia de compilación que se activa cuando una aplicación empaquetada de C++ enlaza el CRT de forma estática (lo cual es necesario para el despliegue autocontenido mediante el CRT híbrido). Establézcalo en false en proyectos de aplicaciones empaquetadas que opten por el CRT híbrido. false (para suprimir la advertencia en aplicaciones autocontenidas empaquetadas) o ausente (valor predeterminado, advertencia habilitada) SDK de Aplicaciones para Windows guía de implementación para aplicaciones independientes
UseWinUI. Especifica si usa el marco de interfaz de usuario de WinUI en la aplicación. true o absent (para false) WinUI en el SDK de Aplicaciones para Windows (WinUI)
WindowsAppSDKSingleFileVerifyConfiguration. Controla si el SDK ejecuta un objetivo de validación en tiempo de compilación cuando se establece PublishSingleFile. Cuando está habilitado (valor predeterminado), el destino emite errores si faltan las propiedades necesarias (EnableMsixTooling, WindowsPackageType=None, IncludeAllContentForSelfExtract) y advertencias si la configuración independiente está ausente (WindowsAppSDKSelfContained, SelfContained). Establézcalo en false solo para suprimir todas las comprobaciones; por ejemplo, en canalizaciones de CI en las que ha comprobado el cumplimiento manualmente. true (valor predeterminado: ejecuciones de validación), false (suprimir todas las comprobaciones) Definido en Microsoft.WindowsAppSDK.SingleFile.targets (incluido automáticamente por el paquete NuGet cuando PublishSingleFile se establece)
WindowsAppSdkBootstrapInitialize. Determina si el SDK de aplicaciones de Windows utiliza o no el inicializador automático de dependencias dinámicas y del programa de arranque. true (el valor predeterminado para los ejecutables), false (el valor predeterminado para los que no son ejecutables) Exclusión (o inclusión) de inicializadores automáticos
WindowsAppSdkDeploymentManagerInitialize. Determina si el SDK de Aplicaciones para Windows aprovecha o no el inicializador automático de Deployment Manager. true (valor predeterminado), false
WindowsAppSDKRuntimePatchLevel1, WindowsAppSDKRuntimePatchLevel2 y WindowsAppSDKDisabledChanges. Determina si el SDK de Aplicaciones para Windows aprovecha el inicializador automático de compatibilidad y configura las opciones de compatibilidad deseadas para el comportamiento en tiempo de ejecución del Aplicación de Windows Runtime con respecto a los cambios agregados en las actualizaciones de mantenimiento. Varios o ausentes (para desactivar el inicializador automático) RuntimeCompatibilityOptions
WindowsAppSDKSelfContained. Determina si una aplicación se implementa o no de forma independiente. true o absent (para false) SDK de Aplicaciones para Windows guía de implementación para aplicaciones independientes
WindowsAppSdkUndockedRegFreeWinRTInitialize. Determina si el SDK de Aplicaciones para Windows aprovecha o no el inicializador automático de activación sin registro. true (el valor predeterminado para los ejecutables), false (el valor predeterminado para los que no son ejecutables) Optar por no participar (o participar) en la compatibilidad automática con UndockedRegFreeWinRT
WindowsPackageType. La configuración <WindowsPackageType>None</WindowsPackageType> de una aplicación sin empaquetar hace que el inicializador automático de dependencias dinámicas o de arranque busque y cargue una versión de la SDK de Aplicaciones para Windows que sea más adecuada para la aplicación. Ninguno o ausente (para deshabilitar el inicializador automático) Desempaquetar una aplicación WinUI

Entre bastidores y cómo desactivar los inicializadores automáticos

Example

Este es un extracto de un archivo .csproj típico para un proyecto WinUI 3 de C#, que muestra algunas de las propiedades del proyecto de la tabla anterior en uso.

...
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    <TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
    ...
    <UseWinUI>true</UseWinUI>
    <EnableMsixTooling>true</EnableMsixTooling>
  </PropertyGroup>
...