Microsoft agora tem .NET Core, .NET Framework e Xamarin (Mono) em sua família .NET.
Parece haver aqui muitas sobreposições. Qual'é a diferença entre estes tipos de .NET? Quando devo escolher usar .NET Core no meu projeto, ao invés de .NET Framework ou Xamarin?
Você deve usar .NET Core, ao invés de .NET Framework ou Xamarin, nos 6 cenários típicos a seguir, de acordo com a documentação [aqui][1].
1. Necessidades de plataformas cruzadas
Claramente, se o seu objectivo é ter uma aplicação (web/serviço) que deve ser capaz de correr através de plataformas (Windows, Linux e MacOS), a melhor escolha no ecossistema .NET é usar o .NET Core como tempo de execução (CoreCLR) e as bibliotecas são multi-plataformas. A outra escolha é usar o Projeto Mono. Ambas as escolhas são open source, mas o .NET Core é direta e oficialmente suportado pela Microsoft e terá um investimento pesado avançando. Ao utilizar o .NET Core entre plataformas, a melhor experiência de desenvolvimento existe no Windows com o Visual Studio IDE que suporta muitos recursos de produtividade, incluindo gerenciamento de projetos, depuração, controle de código-fonte, refatoração, edição rica, incluindo Intellisense, testes e muito mais. Mas o desenvolvimento rico também é suportado usando o Visual Studio Code no Mac, Linux e Windows, incluindo o Intellisense e a depuração. Mesmo editores de terceiros como Sublime, Emacs, VI e outros trabalham bem e podem obter o intellisense do editor usando o projeto de código aberto Omnisharp.
2. Microservices
Quando você está construindo um sistema orientado a microserviços composto de múltiplos microserviços independentes, dinamicamente escaláveis, stateful ou stateless, a grande vantagem que você tem aqui é que você pode usar diferentes tecnologias/frameworks/linguagens a um nível de microserviço. Isso permite que você use a melhor abordagem e tecnologia por micro áreas em seu sistema, então se você quiser construir microserviços muito performantes e escaláveis, você deve usar .NET Core. Eventualmente, se você precisar usar qualquer biblioteca .NET Framework que não seja compatível com o .NET Core, não há problema, você pode construir esse microserviço com o .NET Framework e no futuro você poderá substituí-lo pelo .NET Core. A plataforma de infraestrutura que você poderia usar são muitas. Idealmente, para sistemas microserviços grandes e complexos, você deve usar o Azure Service Fabric. Mas para microserviços sem estado você também pode usar outros produtos como o Azure App Service ou o Azure Functions. Note que a partir de junho de 2016, nem toda tecnologia dentro do Azure suporta o .NET Core, mas o suporte ao .NET Core no Azure estará aumentando dramaticamente agora que o .NET Core foi lançado.
3. Sistemas com melhor desempenho e escaláveis
Quando seu sistema precisa do melhor desempenho e escalabilidade possíveis para que você obtenha a melhor resposta, não importa quantos usuários você tenha, então é onde .NET Core e ASP.NET Core realmente brilham. Quanto mais você puder fazer com a mesma quantidade de infraestrutura/hardware, mais rica será a experiência que você terá para seus usuários finais - a um custo menor. Os dias de melhorias de desempenho da lei de Moore para CPUs únicas não se aplicam mais; ainda assim, você precisa fazer mais enquanto seu sistema está crescendo e precisa de maior escalabilidade e desempenho para os usuários mais exigentes do dia-a-dia que estão crescendo exponencialmente em números. Você precisa se tornar mais eficiente, otimizar em todos os lugares e escalar melhor entre clusters de máquinas, VMs e núcleos de CPU, em última análise. Não é apenas uma questão de satisfação do usuário; também pode fazer uma enorme diferença no custo/TCO. É por isso que é importante lutar pelo desempenho e escalabilidade. Como mencionado, se você puder isolar pequenas peças do seu sistema como microserviços ou qualquer outra abordagem frouxamente acoplada, será melhor, pois você será capaz de não apenas evoluir cada pequena peça/microsserviço independentemente e ter uma melhor agilidade e manutenção a longo prazo, mas também será capaz de usar qualquer outra tecnologia a nível de microserviço se o que você precisa fazer não for compatível com .NET Core. E eventualmente você será capaz de refatorá-lo e trazê-lo para o .NET Core quando possível.
4. Desenvolvimento de estilo de linha de comando para Mac, Linux ou Windows.
Esta abordagem é opcional quando se usa o .NET Core. Você também pode usar o Visual Studio IDE completo, é claro. Mas se você é um desenvolvedor que quer desenvolver com editores leves e uso pesado de linha de comando, o .NET Core foi projetado para CLI. Ele fornece ferramentas simples de linha de comando disponíveis em todas as plataformas suportadas, permitindo aos desenvolvedores construir e testar aplicativos com uma instalação mínima em máquinas de desenvolvimento, laboratório ou produção. Editores como Visual Studio Code usam as mesmas ferramentas de linha de comando para suas experiências de desenvolvimento. E IDEs como o Visual Studio utilizam as mesmas ferramentas CLI, mas as escondem por trás de uma rica experiência IDE. Os desenvolvedores podem agora escolher o nível que desejam para interagir com a cadeia de ferramentas do CLI para o editor para o IDE.
5. Precisa lado a lado das versões .NET por nível de aplicação.
Se você quer ser capaz de instalar aplicativos com dependências em diferentes versões de frameworks em .NET, você precisa usar o .NET Core que fornece 100% lado a lado, como explicado anteriormente neste documento.
6. Aplicativos UWP .NET para Windows 10.
Além disso, você também pode querer ler:
É assim que a Microsoft o explica:
**.NET Framework*** é o "full" ou "tradicional" sabor de .NET que's distribuído com o Windows. Use isso quando você estiver construindo um aplicativo Windows ou UWP, ou trabalhando com ASP.NET 4.6+ mais antigo.
**.NET Core*** é um .NET multiplataforma que roda em Windows, Mac, e Linux. Use isto quando você quiser construir console ou aplicativos web que possam rodar em qualquer plataforma, incluindo dentro de containers Docker. Isso não inclui os aplicativos UWP/desktop atualmente.
Xamarin é usado para construir aplicativos móveis que podem rodar em dispositivos iOS, Android ou Windows Phone.
Xamarin normalmente roda em cima de **Mono***, que é uma versão do .NET que foi construída para suporte multiplataforma antes da Microsoft decidir oficialmente ir para multiplataforma com o .NET Core. Tal como o Xamarin, a plataforma Unity também corre em cima do Mono.
Um ponto comum de confusão é onde o ASP.NET Core se encaixa. O ASP.NET Core pode rodar sobre o .NET Framework (Windows) ou .NET Core (cross-platform), conforme detalhado nesta resposta: Diferença entre o ASP.NET Core (.NET Core) e o ASP.NET Core (.NET Framework) ](https://stackoverflow.com/a/37684644/3191599)
Você pode consultar nesta linha - https://stackoverflow.com/questions/37684508/difference-between-asp-net-core-net-core-and-asp-net-core-net-framework/37684644#37684644
**O Xamarin não é um debate de todo. Quando você quer construir aplicativos móveis (iOS, Android e Windows Mobile) usando C#, Xamarin é sua única escolha.
O .NET Framework suporta aplicações Windows e Web. Hoje, você pode usar o Windows Forms, WPF e UWP para construir aplicativos Windows em .NET Framework. O ASP.NET MVC é usado para construir aplicativos da Web em .NET Framework.
**.NET Core*** é o novo framework open-source e multi-plataforma para construir aplicativos para todos os sistemas operacionais, incluindo Windows, Mac e Linux. .NET Core suporta apenas UWP e ASP.NET Core. O UWP é usado para construir aplicativos Windows 10 para Windows e aplicativos móveis. O ASP.NET Core é usado para construir aplicativos web baseados em navegador.
Se quiser mais detalhes, consulte estes links https://blogs.msdn.microsoft.com/dotnet/2016/07/15/net-core-roadmap/ https://docs.microsoft.com/en-us/dotnet/articles/standard/choosing-core-framework-server