Otra forma de explicar la diferencia podría ser con ejemplos del mundo real, ya que la mayoría de nosotros los mortales usaremos herramientas y marcos existentes (Xamarin, Unity, etc.) para hacer el trabajo.
Entonces, con .NET Framework tiene todas las herramientas .NET para trabajar, pero solo puede apuntar a aplicaciones de Windows (UWP, Winforms, ASP.NET, etc.). Dado que .NET Framework es de código cerrado, no hay mucho que hacer al respecto.
Con .NET Core tiene menos herramientas, pero puede apuntar a las principales plataformas de escritorio (Windows, Linux, Mac). Esto es especialmente útil en las aplicaciones ASP.NET Core, ya que ahora puede alojar Asp.net en Linux (precios de alojamiento más baratos). Ahora, dado que .NET Core fue de código abierto, es técnicamente posible desarrollar bibliotecas para otras plataformas. Pero como no hay marcos que lo admitan, no creo que sea una buena idea.
Con .NET Standard tiene incluso menos herramientas, pero puede apuntar a todas / la mayoría de las plataformas. Puede apuntar a dispositivos móviles gracias a Xamarin, e incluso puede apuntar a consolas de juegos gracias a Mono / Unity. Actualización: también es posible apuntar a clientes web con la plataforma UNO y Blazor (aunque ambos son un poco experimentales en este momento).
En una aplicación del mundo real, es posible que deba usarlos todos. Por ejemplo, desarrollé una aplicación de punto de venta que tenía la siguiente arquitectura:
Compartió tanto el servidor como el cliente:
- Una biblioteca .NET Standard que maneja los Modelos de mi aplicación.
- Una biblioteca .NET Standard que maneja la validación de los datos enviados por los clientes.
Como es una biblioteca estándar .NET, se puede usar en cualquier otro proyecto (cliente y servidor).
También es una buena ventaja tener la validación en una biblioteca estándar .NET ya que puedo estar seguro de que la misma validación se aplica en el servidor y el cliente. El servidor es obligatorio, mientras que el cliente es opcional y útil para reducir el tráfico.
Lado del servidor (API web):
Una biblioteca estándar .NET (también podría ser Core) que maneja todas las conexiones de la base de datos.
Un proyecto .NET Core que maneja la API Rest y hace uso de la biblioteca de la base de datos.
Como esto se desarrolla en .NET Core, puedo alojar la aplicación en un servidor Linux.
Lado del cliente (MVVM con WPF + Xamarin.Forms Android / IOS):
Una biblioteca .NET Standard que maneja la conexión API del cliente.
Una biblioteca estándar .NET que maneja la lógica de ViewModels. Utilizado en todas las vistas.
Una aplicación .NET Framework WPF que maneja las vistas WPF para una aplicación de Windows. Actualización: las aplicaciones WPF pueden ser .NET core ahora, aunque actualmente solo funcionan en Windows. AvaloniaUI es una buena alternativa para crear aplicaciones GUI de escritorio para otras plataformas de escritorio.
Una biblioteca estándar .NET que maneja las vistas de formularios Xamarin.
Un proyecto Xamarin para Android y Xamarin IOS.
Entonces puede ver que hay una gran ventaja aquí en el lado del cliente de la aplicación, ya que puedo reutilizar ambas bibliotecas .NET Standard (Client API y ViewModels) y simplemente crear vistas sin lógica para las aplicaciones WPF, Xamarin e IOS.