Eu li sobre a diferença entre o .NET Standard e o .NET Core, mas realmente não sei qual é a diferença ou quando escolher um projeto de biblioteca do .NET Standard e quando escolher um projeto de biblioteca do .NET Core.
Eu li que o .NET Standard é para garantir que um conjunto de APIs esteja sempre disponível, independentemente da plataforma usada (desde que essa plataforma seja compatível com a versão do .NET Standard que eu escolhi). Se não me engano, isso significa que posso criar uma biblioteca de classes do .NET Standard e usá-la em qualquer plataforma compatível com a versão do .NET Standard que eu escolhi.
Com o .NET Core, eu li que ele também se destina ao uso em várias plataformas; portanto, se eu escolher uma biblioteca do .NET Core, parece que também posso usá-lo em várias plataformas, assim como o .NET Standard.
Então, no final, não vejo a diferença. Quando devo usar qual? Qual a diferença entre eles?
fonte
Respostas:
Tentarei esclarecer melhor suas dúvidas e estender a resposta de Jon Skeet.
O .NET Standard é uma especificação , portanto, uma biblioteca compilada para uma versão específica do .NET Standard pode ser usada em diferentes implementações do .NET Standard.
Como dito no meu outro comentário, uma boa analogia para o relacionamento entre o .NET Standard e outras implementações do .NET Standard (.NET Core, .NET Framework, etc) é essa essência de David Fowler : As versões do .NET Standard são
Interfaces
, enquanto as estruturas são implementações dessas interfaces.Este diagrama simplificado pode ajudar a entender esse relacionamento:
Qualquer coisa de segmentação
NetCore10
tem acesso aINetStandard15
APIs e APIsNetCore10
específicas (comoDotNetHostPolicy
).Obviamente, essa biblioteca não pode ser usada em diferentes
INetStandard15
implementações (NetCore10
não é conversível emNetFramework462
ouMono46
).Se, em vez disso, necessidade acesso apenas a
INetStandard15
APIs (e alvo que especificação em vez de um quadro concreto) sua biblioteca pode ser usado por qualquer estrutura que implementa-lo (NetCore10
,NetFramework462
, etc.)Nota: na analogia original, David Fowler usou interfaces para versões do .NET Standard e implementações de estruturas. Acredito que o uso de interfaces e classes é, ao invés, mais intuitivo e representa melhor o relacionamento entre especificações e implementações concretas.
fonte
O .NET Core é uma implementação do .NET Standard. Está disponível em vários sistemas operacionais, mas não é a mesma coisa - também existem outras implementações do .NET Standard.
Portanto, se você criar uma biblioteca .NET Core, ela terá acesso a itens implementados no .NET Core, mas não faz parte do .NET Standard, e sua biblioteca não será compatível com outras implementações do .NET Standard, como Xamarin, Tizen, estrutura de desktop .NET completa etc.
Em resumo: para obter a portabilidade máxima, faça com que sua biblioteca seja direcionada ao .NET Standard.
fonte
INetStandard16
). O .NET Core 1.0 e o Mono 4.6 são implementadosINetStandard16
. Você não pode converter .Net Core 1.0 para Mono 4.6 (e vice-versa), mas qualquer coisa que useINetStandard16
funcionará em ambos. (créditos para David Fowler )A biblioteca .NET Core Class é basicamente um subconjunto da biblioteca .NET Framework, que contém apenas menos APIs. A adesão à biblioteca do .NET Core Class dificulta o compartilhamento de código entre os tempos de execução. Esse código pode não funcionar para um tempo de execução diferente (Mono para Xamarin), porque não possui a API necessária. Para resolver isso, existe o .NET Standard, que é apenas um conjunto de especificações que informa quais APIs você pode usar . O principal objetivo do .NET Standard é compartilhar código entre tempos de execução. E é importante que essa especificação seja implementada em todos os tempos de execução. (.NET Framework, .NET Core e Mono para Xamarin).
Portanto, se você tiver certeza de que usará sua biblioteca apenas para projetos .NET Core, poderá ignorar o .NET Standard, mas se houver uma pequena chance de que seu código seja usado pelo .NET Framework ou Mono for Xamarin, é melhor aderir ao .NET Standard
Observe também que as versões superiores do .NET Standard contêm mais APIs, mas as versões inferiores são suportadas por mais plataformas. Portanto, se você criar uma biblioteca .NET Standard que deseja compartilhar entre os tempos de execução, segmente a versão mais baixa possível , o que ajuda a alcançar o maior número de plataformas. Por exemplo, se você deseja executar o .NET Framework 4.5 e o .NET Core 1.0, a versão mais alta do .NET Standard que você pode usar é o .NET Standard 1.1. Consulte esta excelente tabela da documentação para obter mais informações sobre ela.
PS: Além disso, se você deseja converter sua biblioteca para o .NET Standard, o .NET Portability Analyzer pode ajudá-lo.
fonte
O .NET Standard é uma especificação das APIs do .NET destinadas a estar disponíveis nas implementações do .NET. Isso permite definir um conjunto uniforme de APIs BCL para todas as implementações do .NET.
O .NET Core é uma dessas implementações do .NET Standard. O .NET Framework é outra implementação do .NET Standard.
Imagem do .NET Blog
A resposta de Federicos fornece uma visão geral gráfica de como cada estrutura evolui com versões. Veja o diagrama abaixo do Microsoft Docs .
fonte
O exposto acima, juntamente com uma explicação muito clara da maioria dos itens discutidos nesta pergunta, podem ser encontrados no seguinte artigo extremamente útil da Microsoft (MSDN - setembro de 2017): .NET Standard - Desmistificando o .NET Core e o .NET Standard
fonte
Você quis dizer .NET Framework? Porque o padrão .NET é uma implementação, como .NET Framework, .NET Core e Xamarin.
Eu amo o .NET Core porque podemos hospedá-lo no Linux (use o nginx na minha experiência). É diferente do .NET Framework, que você só pode hospedar no IIS. Você pode considerar o orçamento de hospedagem neste caso (porque o servidor Windows é caro para mim).
Na perspectiva do ambiente de desenvolvimento , o núcleo .Net é leve. Portanto, você pode usar o VSCode, Sublime, para IDE (não apenas o visual studio).
fonte
Em termos simples, o padrão .NET é usado para escrever projetos de bibliotecas de classes que são compilados em dll. O .NET Core pode ser usado para desenvolver aplicativos da Web reais que podem ser executados em todos os sistemas operacionais (Windows, Linux, MacOS). (No .NET Core 3, a Microsoft fornece a funcionalidade para desenvolver aplicativos de desktop usando o WPF, mas agora esses aplicativos não serão multiplataforma e serão executados apenas no sistema Windows. No futuro, a Microsoft poderá torná-los entre plataformas também) bibliotecas / dlls podem ser usadas em qualquer aplicativo que use .NET (.NET framework, .NET Core), o que significa que você pode usar o .NET standard com o .NET Framework e o .NET core.
fonte