“La plataforma objetivo debe configurarse como Windows” al utilizar Prism.DryIoc en una biblioteca de clases .NET 6.0.
Estoy utilizando una biblioteca de clases para pruebas y necesito configurar DryIoc, por lo que hago referencia al paquete NuGet Prism.DryIoc. Ten en cuenta que estoy trabajando en una solución de Xamarin y no tengo (ni necesito) ningún componente de WPF (u otros componentes de Windows).
Cuando mi biblioteca de clases está configurada para .NET Core 3.1, se compila correctamente. Sin embargo, si la cambio a .NET 5.0 o .NET 6.0, obtengo el siguiente error:
Error NETSDK1136 La plataforma objetivo debe establecerse en Windows (generalmente mediante la inclusión de ‘-windows’ en la propiedad TargetFramework) al utilizar Windows Forms o WPF, o al hacer referencia a proyectos o paquetes que lo hacen.
C:\Program
Files\dotnet\sdk\6.0.100\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.DefaultItems.Shared.targets
250
Cuando reviso las referencias de Prism.DryIoc, veo que hace referencia a Prism.Wpf.
¿Alguien sabe cómo eliminar por completo cualquier dependencia de Wpf, para poder compilar mi biblioteca directamente con .NET 6.0 sin problemas y sin tener que especificar Windows como marco objetivo?
Pasos para reproducir:
- Abre Visual Studio 2022
- Crea un nuevo proyecto de tipo Biblioteca de Clases apuntando a .NET 6.0
- Agrega una referencia NuGet a la última versión de Prism.DryIoc (8.1.97 en este momento)
- Reconstruye el proyecto (a veces es necesario reconstruirlo dos veces para ver el error)
Se adjunta una muestra de la biblioteca de clases.
davy.ai
Desafortunadamente, parece que no hay forma de eliminar las dependencias de WPF del paquete Prism.DryIoc. Al instalar el paquete, se incluyen varios otros paquetes de Prism, incluido Prism.Wpf, que tiene una dependencia transitiva en System.Windows. Dado que System.Windows no está disponible en .NET 6.0, encontrarás el error mencionado.
La solución recomendada es mover tus pruebas a un proyecto separado que apunte a .NET Framework, ya que este problema solo afecta a los proyectos que apuntan a .NET 6.0 o posterior. Alternativamente, podrías cambiar a un contenedor de inyección de dependencias diferente que no tenga dependencias con ningún paquete relacionado con WPF, como Microsoft.Extensions.DependencyInjection.
Aquí están los pasos para mover tus pruebas a un proyecto separado:
Ten en cuenta que este enfoque tiene la desventaja de requerir un proyecto separado y potencialmente introducir complejidad adicional en tu solución. Sin embargo, es una buena solución alternativa si necesitas usar Prism.DryIoc en tus pruebas pero no puedes apuntar a .NET 6.0 o posterior.