¿Cómo empaquetar NuGet para WinUI3 y WPF al mismo tiempo?
Necesito crear un paquete NuGet, es necesario para WinUI 3 y WPF, porque cargar el hilo principal en WinUI 3 es diferente a WPF. Consulta Cómo obtener DispatcherQueue en WinUI 3 Desktop usando Windows App SDK, por lo tanto, necesito distinguirlos. Pero veo que Windows.AppSdk solo está disponible para net5-windows, no los distingue. ¿Cómo los distingo cuando los empaqueto en un solo paquete NuGet?
davy.ai
Creación de un paquete NuGet para WinUI3 y WPF
Al crear un paquete NuGet que necesita ser utilizado en aplicaciones tanto de WinUI3 como de WPF, es importante tener en cuenta las diferencias en cómo se carga el hilo principal en cada framework. En WinUI3, el enfoque recomendado es utilizar
DispatcherQueue
, mientras que en WPF, el enfoque recomendado es utilizarDispatcher
.Para distinguir entre estos dos enfoques al empaquetar las bibliotecas en un único paquete NuGet, una posible solución es utilizar directivas de compilación condicional en el código fuente. Aquí hay una forma de hacerlo:
WINUI3
para los proyectos de WinUI3 yWPF
para los proyectos de WPF. Para hacer esto, ve a las propiedades de tu proyecto y agrega la siguiente directiva de preprocesador para cada framework de destino:o
Puedes lograr esto creando dos carpetas separadas dentro del paquete NuGet, una para cada framework, y utilizando la carpeta correspondiente al instalar el paquete en un proyecto.
Por ejemplo, puedes crear una carpeta llamada
lib\winui3
que incluya el archivo binario específico de WinUI3, y otra carpeta llamadalib\wpf
que incluya el archivo binario específico de WPF. Al instalar el paquete en un proyecto de WinUI3, se utilizará la carpetawinui3
, y al instalar el paquete en un proyecto de WPF, se utilizará la carpetawpf
.Al utilizar este enfoque, puedes crear un paquete NuGet que funcione con ambos WinUI3 y WPF, al mismo tiempo que maneja las diferencias entre los dos frameworks en cuanto a la carga del hilo principal.