A Microsoft anunciou o .NET Core 2.0. No entanto, a confusão ainda existe entre desenvolvedores sobre as diferenças entre .NET Core, .NET Standard, Xamarin, and the .NET Framework.
O .NET Framework é usado para construir aplicações desktop e aplicações ASP.NET rodando no IIS (Internet Information Server). Ele foi o primeiro framework de código gerenciado lançado. Já o Xamarim é um framework de código gerenciado usado para construir aplicações iOS, Android e desktop para macOS.
.NET Core
O .NET Core é uma implementação grátis, de código aberto, cross-platform do framework de código gerenciado. Ele suporta quatro tipos de aplicações: console, ASP.NET Core, cloud, e Universal Windows Platform (UWP). Os tipos Windows Forms and Windows Presentation Foundation (WPF) não são parte do .NET Core.
Tecnicamente, o .NET Core suporta apenas aplicações console. O ASP.NET Core e o UWP são modelos de aplicações construídos sobre o .NET Core.
Diferente do .NET Framework, o .NET Core não é considerado um componente Windows. Assim, atualizações vêm como pacotes NuGet, e não pelo Windows Update. Uma vez que o ambiente do .NET Core é instalado como App-Local, e as aplicações são atualizadas através do gerenciador de pacotes, as aplicações podem ser associadas a uma versão específica do .NET Core e serem atualizadas individualmente.
.NET Standard
Cada implementação do framework tem sua própria coleção de Bibliotecas de Classe (BCL - Base Class Libraries). A Classe Base (BCL) contém classes como as de tratamento de exceção, de strings, de XML, de I/O, de rede e de coleções.
O .NET Standard é uma especificação para implementar a BCL. Uma vez que uma implementação .NET precisa seguir esse padrão, desenvolvedores de aplicações não terão que se preocupar com diferentes versões do BCL pra cada implementação de framework de código gerenciado.
As bibliotecas de classe do .NET Framework (FCL - Framework Class Libraries) como o WPF, o WCF, e o ASP.NET não são parte da BCL, e também não estão incluídas no .NET Standard.
A relação entre o .NET Standard e uma implementação .NET é a mesma entre a especificação HTML e um navegador. O segundo é uma implementação da primeira.
Consequentemente, o .NET Framework, o Xamarim e o .NET Core implementam o .NET Standard para a BCL em seus frameworks gerenciados. Desde que a indústria da computação continue a introduzir novos hardwares e sistemas operacionais, haverá novos frameworks gerenciados para o .NET. Este padrão permite desenvolvedores de aplicações a conhecer que há um consistente conjunto de APIs em que podem confiar.
Cada versão do .NET tem uma versão associada do .NET Standard.
Ao prover APIs consistentes, portar aplicações para diferentes implementações gerenciadas, assim como fornecer ferramentas, fica mais fácil.
O .NET Standard é definido como um único pacote NuGet, pois todas as implementações .NET são requisitadas a suportá-la. Utilizar ferramentas se torna fácil porque têm um conjunto consistente de APIs para usar dada uma versão. Também podemos construir um projeto de biblioteca única para múltiplas implementações .NET.
Também podemos construir encapsuladores (wrappers) em .NET Standard para APIs de plataformas específicas.
.NET Standard vs Bibliotecas Portáveis de Classe (Portable Class Libraries)
As Bibliotecas Portáveis de Classe não fazem a mesma coisa?
As Classes Portáveis usavam um conjunto de APIs comuns que uma plataforma suportava. Consequentemente, quanto mais plataformas você suportava, menos APIs disponíveis você teria. Era difícil entender quais APIs eram realmente suportadas em uma combinação de plataformas, e com uma nova plataforma, as Bibliotecas Portáveis (PCL) existentes tinham que ser recompiladas. As PCLs também demandavam da Microsoft criar uma nova implementação do Framework para cada plataforma.
Uma vez que o .NET Standard corrige a API, ao invés da implementação, não há necessidade de recompilar uma aplicação. Qualquer implementação nova de .NET lançada implementa as bibliotecas requisitadas. Uma aplicação pode visar uma nova plataforma de hardware ou sistema operacional sem qualquer necessidade de recompilação. Teoricamente, podemos pegar uma NotSupportedException ao invocar uma API, mas isso seria raro.
Conclusões
O .NET Standard é uma especificação de API que define, dada uma versão, quais Bibliotecas de Classe (Base Class Libraries) devem ser implementadas.
O .NET Core é um framework de código gerenciado que é otimizado para construir aplicações console, cloud, ASP.NET Core, e UWP. O .NET Core fornece uma implementação do .NET Standard para as Bibliotecas de Classe.