Necesito hacer referencia a una biblioteca de cliente propietario que solo funciona con .NET 4.8, no hay otra opción, esta es una biblioteca de proveedores muy limitada y tenemos que usarla con .NET 48.
La nueva aplicación que se está desarrollando es una aplicación de servicio y deberá mantenerse a largo plazo. Y está bien que esta aplicación se instale solo en Windows. Pero nos gustaría que la aplicación se beneficie de .NET 6, al mismo tiempo que puede usar la biblioteca de cliente .NET 4.8.
Así que mi pregunta es: ¿cuál sería/podría ser una buena solución que:
¡Gracias por tu ayuda!
Sí, es posible tener un cliente escrito en .NET Framework 4.8 y un servidor en .NET Core 6. También es posible tener un cliente y un servidor escritos en diferentes lenguajes de programación, por lo que no hay razón para que su caso de uso no ser posible. Sin embargo, no es posible hacer referencia a un ensamblado de .NET Core desde un ensamblado de .NET Framework.
Sí, puede hacer referencia al ensamblado .NET 4.8 desde .NET 6. Sin embargo, no hay garantías de que funcione como se espera. Funcionará solo si no usa ninguna API que no esté presente en .NET 6 (o más bien la versión estándar de .NET compatible con .NET 4.8), y si las API que usa no tienen cambios importantes (para esa lógica de aplicación).
Puede probarlo fácilmente creando la biblioteca .NET 4.8 con algo como esto:
public class Test { public static void OldNet() { Console.WriteLine("Hello from old .NET"); } }Luego consúltelo desde .NET 6 y llame:
OldNet4.Test.OldNet();Ejecute e imprimirá "Hello from old .NET" sin problema.
Sin embargo, si, por ejemplo, usa Thread.Abort en esa antigua biblioteca .NET 4.8, cuando se ejecuta en .NET 6, no cancelará el subproceso de destino, sino que generará PlatformNotSupportedException , que es un ejemplo de cambio de ruptura. Si llama a la API faltante, lanzará TypeNotFound o excepciones similares.
Entonces, el resultado final depende de la biblioteca a la que se hace referencia.