es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

“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:

  1. Abre Visual Studio 2022
  2. Crea un nuevo proyecto de tipo Biblioteca de Clases apuntando a .NET 6.0
  3. Agrega una referencia NuGet a la última versión de Prism.DryIoc (8.1.97 en este momento)
  4. Reconstruye el proyecto (a veces es necesario reconstruirlo dos veces para ver el error)

Se adjunta una muestra de la biblioteca de clases.

Tags:  , ,

Answer

  1. Avatar for 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:

    1. Crea un nuevo proyecto de tipo Class Library que apunte a .NET Framework (la versión más reciente de .NET Framework es 4.8 en este momento).
    2. Agrega referencias de NuGet a Prism.DryIoc y cualquier otra dependencia necesaria para tus pruebas.
    3. Escribe tus pruebas en el nuevo proyecto.
    4. Haz referencia al proyecto de la biblioteca de clases desde tu solución de Xamarin y utiliza las pruebas según sea necesario.

    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.

Comments are closed.