Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.xmlarchivo 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
.csprojo.vcxprojmediante<WindowsAppSdkBootstrapInitialize>false</WindowsAppSdkBootstrapInitialize>.
- En el caso de una aplicación empaquetada, no necesita el inicializador automático de dependencias de arranque o dinámicas porque el
- 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.xmlarchivo 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>.
- 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
- 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>
...
Temas relacionados
- Información general de implementación
- Creación y ejecución de un proyecto de WinUI 3
- Empaqueta tu aplicación utilizando MSIX de proyecto único
- RuntimeCompatibilityOptions
- Usar el entorno de ejecución de SDK de Aplicaciones para Windows para aplicaciones paquetizadas con ubicación externa o sin empaquetar
- SDK de Aplicaciones para Windows guía de implementación para aplicaciones independientes
- Introducción a la implementación de SDK de Aplicaciones para Windows
- Aplicaciones de Windows: empaquetado, implementación y proceso
- WinUI en el SDK de Aplicaciones para Windows (WinUI)
Windows developer