Guía de implementación de SDK de Aplicaciones para Windows para aplicaciones independientes
Un proyecto de SDK de Aplicaciones para Windows 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 SDK de Aplicaciones para Windows información general de implementación).
- 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.
- En el caso de los proyectos empaquetados, en el archivo del proyecto de aplicación, al final del archivo antes del cierre
</Project>
, agregue elTarget
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 SDK de Aplicaciones para Windows 1.1 y no será necesario con SDK de Aplicaciones para Windows 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 SDK de Aplicaciones para Windows ejemplos de implementación independientes.
Después de establecer la WindowsAppSDKSelfContained
propiedad true
en en el archivo del proyecto, el contenido del paquete de SDK de Aplicaciones para Windows 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
todavía no se admite con SDK de Aplicaciones para Windows 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 SDK de Aplicaciones para Windows 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 se empaqueta con ubicación externa o sin empaquetar, las dependencias de SDK de Aplicaciones para Windows 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 en el SDK de Aplicaciones para Windows dependen de paquetes MSIX adicionales que representan la funcionalidad crítica del sistema operativo (SO).
- Por ejemplo (a partir de la SDK de Aplicaciones para Windows 1.1), las API de notificaciones push (PushNotificationManager) y las API de notificaciones de aplicaciones (AppNotificationManager) tienen una dependencia en el paquete Singleton (consulte Arquitectura de implementación para el SDK de Aplicaciones para Windows).
Esto significa que si quiere usar esas API en una aplicación independiente, tiene las siguientes opciones:
- 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.
- 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.
- No use la API.
- Considere las API alternativas que proporcionan una funcionalidad similar sin requisitos de implementación adicionales.
Optar por no participar (o participar) en la compatibilidad automática con UndockedRegFreeWinRT)
La propiedad del proyecto WindowsAppSdkUndockedRegFreeWinRTInitialize se introdujo en la versión 1.2 del SDK de Aplicaciones para Windows (desde el canal estable). Si esa propiedad se establece en true, garantiza que la implementación del SDK de Aplicaciones para 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 de la SDK de Aplicaciones para 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>
.