O que é o ".NET Core"?

323

Recentemente, em um blog oficial do .NET Framework , foi anunciado que o .NET Core será aberto .

Ironicamente, o autor menciona que o que é o .NET Core será explicado na próxima postagem. Mais alguns detalhes são mencionados em outro post do anúncio .

A partir de um diagrama fornecido:

Diagrama do .NET Core

e o próprio texto dos artigos, eu assumiria que o .NET Core (além de coisas óbvias como ser de código aberto) é uma reimplementação modular do .NET completo. Ou seja, os componentes da estrutura são carregados conforme necessário, assim como os pacotes NuGet são carregados agora. E agora o ASP.NET 5 é um dos módulos já implementados. O meu entendimento do .NET Core está correto? Talvez esteja faltando alguma coisa?


Eu encontrei um artigo recente que achei curto e muito bom. Abrange o .NET Standard, o .NET Core e o .NET Framework e seus relacionamentos. Eu recomendo.

Petr Abdulin
fonte
5
Há uma nova postagem no blog aqui sobre blogs.msdn.com/b/dotnet/archive/2014/12/04/…, mas ainda é difícil entender esse diagrama. Isso significa que o WPF e o WinForms não podem usar o .NET Core, por exemplo?
Dodgy_coder 8/12/14
@dodgy_coder Acho que, eventualmente, é só que os aplicativos da loja e o ASP.NET 5 são os primeiros a usar a nova arquitetura de estrutura.
Petr Abdulin
1
@dodgy_coder, está certo. No momento, os aplicativos WPF e WinForms não são portáveis ​​para o núcleo .net. Eles podem ser reconstruídos em aplicativos universais do Windows. Veja isto: blogs.msdn.microsoft.com/dotnet/2016/02/10/porting-to-net-core
VivekDev 27/02/16

Respostas:

154

No blog do .NET Anunciando a visualização do .NET 2015: uma nova era para o .NET :

O .NET Core possui dois componentes principais. Ele inclui um pequeno tempo de execução criado a partir da mesma base de código que o .NET Framework CLR. O tempo de execução do .NET Core inclui o mesmo GC e JIT (RyuJIT), mas não inclui recursos como Domínios de Aplicativos ou Segurança de Acesso ao Código. O tempo de execução é entregue via NuGet, como parte do pacote [ASP.NET Core].

O .NET Core também inclui as bibliotecas da classe base. Essas bibliotecas são basicamente o mesmo código que as bibliotecas de classes do .NET Framework, mas foram fatoradas (remoção de dependências) para permitir o envio de um conjunto menor de bibliotecas. Essas bibliotecas são enviadas como System. * Pacotes NuGet no NuGet.org.

E:

[ASP.NET Core] é a primeira carga de trabalho que adotou o .NET Core. O [ASP.NET Core] é executado no .NET Framework e no .NET Core. Um valor-chave do [ASP.NET Core] é que ele pode ser executado em várias versões do [.NET Core] na mesma máquina. O site A e o site B podem ser executados em duas versões diferentes do .NET Core na mesma máquina ou podem usar a mesma versão.

Em resumo: primeiro, havia o Microsoft .NET Framework , que consiste em um tempo de execução que executa o código do aplicativo e da biblioteca, e uma biblioteca de classes padrão quase totalmente documentada .

O tempo de execução é o Common Language Runtime , que implementa a Common Language Infrastructure , trabalha com o compilador JIT para executar o bytecode CIL (anteriormente MSIL) .

A especificação e implementação do .NET da Microsoft eram, devido ao seu histórico e objetivo, muito centradas no Windows e no IIS e "gordas". Existem variações com menos bibliotecas, espaços de nomes e tipos , mas poucas delas foram úteis para o desenvolvimento da Web ou da área de trabalho ou são difíceis de portar do ponto de vista legal .

Portanto, para fornecer uma versão do .NET que não seja da Microsoft, que pode ser executada em máquinas que não sejam Windows, uma alternativa teve que ser desenvolvida. Não apenas o tempo de execução precisa ser portado para isso, mas também toda a Framework Class Library para se tornar bem adotada. Além disso, para ser totalmente independente da Microsoft, será necessário um compilador para os idiomas mais usados.

Mono é uma das poucas, se não a única implementação alternativa do tempo de execução , que é executada em vários sistemas operacionais além do Windows, quase todos os namespaces da Framework Class Library a partir do .NET 4.5 e de um compilador VB e C # .

Digite o .NET Core: uma implementação de código-fonte aberto do tempo de execução e uma biblioteca de classes base mínima. Toda a funcionalidade adicional é fornecida através dos pacotes NuGet, implantando o tempo de execução específico, as bibliotecas de estrutura e os pacotes de terceiros com o próprio aplicativo.

O ASP.NET Core é uma nova versão do MVC e WebAPI, agrupada com uma fina abstração de servidor HTTP, executada no tempo de execução do .NET Core - mas também no .NET Framework.

CodeCaster
fonte
4
Oh, foi assim que eu perdi! Na verdade, estava abaixo na linha do tempo do blog! Que pena ..
Petr Abdulin
17
É tudo muito novo e mal descrito, acho que você fez uma boa pergunta. :)
CodeCaster
3
Pensando bem, parece que não é o "próximo post", pois a descrição ainda é bastante breve.
precisa
2
Não é basicamente isso que o vNext estava nos trazendo?
Ps2goat
3
Fazemos isso desde que começaram a publicar o framework via nuget. Não há necessidade de solução alternativa nessa postagem.
Ps2goat
84

É um subconjunto do .NET Framework, iniciado com a edição do Compact Framework. Ele progrediu para o Silverlight, Windows Store e Windows Phone. Ele se concentrou em manter a implantação pequena, adequada para downloads e dispositivos rápidos com recursos limitados de armazenamento. E é mais fácil criar em plataformas não Windows, e certamente foi por isso que foi escolhida como a edição de código aberto. As partes "difícil" e "cara" do CLR e as bibliotecas da classe base são omitidas.

Caso contrário, é sempre fácil reconhecer quando você segmenta essa versão de estrutura, porque muitas guloseimas estarão ausentes. Você usará um conjunto distinto de assemblies de referência que expõem apenas o que é suportado pelo tempo de execução. Ele é armazenado em sua máquina no C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCorediretório


Atualização: após o lançamento do .NET Core 2.0, vi alguns números representativos que fornecem uma visão decente. Nos últimos dois anos, eles têm trabalhado duro no trabalho de retroceder APIs da estrutura para o .NET Core. O .NET Core 1.0 originalmente suportou 13.000 APIs. O .NET Core 2.0 adicionou 20.000 APIs, elevando o total para 32.000 e permitindo que cerca de 70% dos pacotes NuGet existentes sejam portados. Há um conjunto de APIs muito pesadas para o Windows para serem fáceis de portar para Linux e MacOS. Coberto pelo Windows Compatibility Pack, lançado recentemente, ele adiciona outras 20.000 APIs.

Hans Passant
fonte
4
No post do blog, eu não diria como isso se parece com outra versão do framework 'compacta'. Anunciada .NET Coreé a versão 5.0, que é superior à última estrutura completa. Suponho que eles querem dizer que é algo diferente.
Petr Abdulin
5
Acabei de descrever o histórico da versão do .NETCore. Nada de novo sob o sol, já existe há muito tempo. As alterações no 5.0 são incrementais, o novo jitter RyuJIT x64 é o único que consigo pensar agora. Apenas a mudança de licença é realmente novo :)
Hans Passant
3
Compreendi seu argumento. Embora eu ainda ache que anunciar o subconjunto da estrutura como a próxima era do .NET seja um pouco ousado.
precisa
50

Eu encontrei um artigo recente que achei curto e muito bom. Abrange o .NET Standard, o .NET Core e o .NET Framework e seus relacionamentos. Eu recomendo. Infelizmente, não tenho tempo para me adaptar e colocar aqui.

Conteúdo da resposta original abaixo:


Portanto, com base na última entrada oficial sobre o assunto, aqui estão alguns pontos-chave:

O .NET Core é essencialmente uma bifurcação do .NET Framework cuja implementação também é otimizada em relação a preocupações de fatoração.

Consideramos o .NET Core como não específico para o .NET Native e o ASP.NET 5 - o BCL e os tempos de execução são de uso geral e projetados para serem modulares. Como tal, forma a base para todos os futuros verticais do .NET.

Portanto, o .NET Native e o ASP.NET 5 são apenas "assuntos" de teste para a nova configuração da estrutura, parcialmente isso talvez porque sejam bem diferentes:

Digite a descrição da imagem aqui

Veja, eles até precisam de nível baixo separado, mas uma grande parte do BCL ainda é comum:

Consideramos o .NET Core como não específico para o .NET Native e o ASP.NET 5 - o BCL e os tempos de execução são de uso geral e projetados para serem modulares. Como tal, forma a base para todos os futuros verticais do .NET.

Ou seja, retângulos magenta na parte superior serão adicionados maciçamente com os novos modelos de aplicativos, mas a base permanecerá comum.

Implantação do NuGet:

Ao contrário do .NET Framework, a plataforma .NET Core será entregue como um conjunto de pacotes NuGet. Decidimos usar o NuGet porque é onde a maioria do ecossistema de bibliotecas já está.

Relacionamento com os quadros atuais:

Para o Visual Studio 2015, nosso objetivo é garantir que o .NET Core seja um subconjunto puro do .NET Framework. Em outras palavras, não haveria lacunas de recursos. Após o lançamento do Visual Studio 2015, nossa expectativa é que o .NET Core seja mais rápido que o .NET Framework. Isso significa que haverá momentos em que um recurso estará disponível apenas nas plataformas baseadas no .NET Core.

Resumo:

A plataforma .NET Core é uma nova pilha .NET otimizada para desenvolvimento de código aberto e entrega ágil no NuGet. Estamos trabalhando com a comunidade Mono para torná-lo excelente no Windows, Linux e Mac, e a Microsoft oferecerá suporte nas três plataformas.

Estamos mantendo os valores que o .NET Framework traz para o desenvolvimento de classe corporativa. Ofereceremos distribuições do .NET Core que representam um conjunto de pacotes NuGet que testamos e suportamos juntos. O Visual Studio continua sendo o seu balcão único para o desenvolvimento. Consumir pacotes NuGet que fazem parte de uma distribuição não requer uma conexão com a Internet.

Basicamente, isso pode ser pensado como um .NET 4.6 com um modelo de distribuição alterado, que, simultaneamente, está em processo de se tornar código-fonte aberto.

Petr Abdulin
fonte
22

A documentação atual tem uma boa explicação sobre o que é o .NET Core, áreas a serem usadas e assim por diante. As seguintes características melhor definem o .NET Core:

Implantação flexível : pode ser incluído no seu aplicativo ou instalado lado a lado pelo usuário ou por toda a máquina.

Plataforma cruzada : roda em Windows, macOS e Linux; pode ser portado para outros sistemas operacionais. Os sistemas operacionais (SOs), CPUs e cenários de aplicativos suportados crescerão com o tempo, fornecidos pela Microsoft, outras empresas e indivíduos.

Ferramentas de linha de comando : Todos os cenários do produto podem ser exercitados na linha de comando.

Compatível : O .NET Core é compatível com o .NET Framework, Xamarin e Mono, por meio da .NET Standard Library.

Código aberto : a plataforma .NET Core é código aberto, usando as licenças MIT e Apache 2. A documentação é licenciada sob CC-BY. O .NET Core é um projeto do .NET Foundation.

Suportado pela Microsoft : O .NET Core é suportado pela Microsoft, por Suporte do .NET Core

E aqui está o que o .NET Core inclui:

Um tempo de execução .NET, que fornece um sistema de tipos, carregamento de montagem, um coletor de lixo, interoperabilidade nativa e outros serviços básicos.

Um conjunto de bibliotecas de estrutura, que fornecem tipos de dados primitivos, tipos de composição de aplicativos e utilitários fundamentais.

Um conjunto de ferramentas do SDK e compiladores de idiomas que permitem a experiência básica do desenvolvedor, disponível no .NET Core SDK.

O host de aplicativos 'dotnet', usado para iniciar aplicativos .NET Core. Ele seleciona o tempo de execução e o hospeda, fornece uma política de carregamento de montagem e inicia o aplicativo. O mesmo host também é usado para iniciar as ferramentas do SDK da mesma maneira.

Conjunto
fonte
19

O .NET Core é uma nova implementação de plataforma cruzada dos padrões .NET (ECMA 335) semelhante ao Mono, mas feita pela própria Microsoft.

Consulte docs.microsoft.com

farfareast
fonte
18

A Microsoft reconheceu o futuro paradigma de código aberto da Web e decidiu abrir o .NET para outros sistemas operacionais. O .NET Core é um .NET Framework para Mac e Linux. Como é um .NET Framework "leve", faltam alguns recursos / bibliotecas.

No Windows, eu continuaria executando o .NET Framework e o Visual Studio 2015. O .NET Core é mais amigável com o mundo do código aberto, como Node.js , npm, Yeoman , Docker , etc.

Você pode desenvolver sites completos e APIs RESTful no Mac ou Linux com o Visual Studio Code + .NET Core, o que não era possível antes. Portanto, se você gosta de Mac ou Ubuntu e é um desenvolvedor .NET, vá em frente e configure-o.

Para Mono vs. .NET Core, o Mono foi desenvolvido como um .NET Framework para Linux que agora é adquirido pela Microsoft (empresa chamada Xamarin ) e usado no desenvolvimento móvel. Eventualmente, a Microsoft pode mesclar / migrar o Mono para o .NET Core. Eu não me preocuparia com Mono agora.

Manish Jain
fonte
12

Eu estava tentando criar um novo projeto no Visual Studio 2017 hoje (recentemente atualizado do Visual Studio 2015) e notei um novo conjunto de opções para o tipo de projeto. Ou são novos ou já faz um tempo desde que iniciei um novo projeto !! :)

Captura de tela do Visual Studio

Encontrei este link de documentação e achei muito útil, por isso estou compartilhando. Os detalhes das balas também são fornecidos no artigo. Estou apenas postando marcadores aqui:

Você deve usar o .NET Core para seu aplicativo de servidor quando:

You have cross-platform needs.
You are targeting microservices.
You are using Docker containers.
You need high performance and scalable systems.
You need side by side of .NET versions by application.

Você deve usar o .NET Framework para seu aplicativo de servidor quando:

Your application currently uses .NET Framework (recommendation is to extend instead of migrating)
You need to use third-party .NET libraries or NuGet packages not available for .NET Core.
You need to use .NET technologies that are not available for .NET Core.
You need to use a platform that doesnt support .NET Core.

Este link fornece um glossário de termos .NET.

joym8
fonte
11

No site da Microsoft :

O .NET Core refere-se a várias tecnologias, incluindo .NET Core, ASP.NET Core e Entity Framework Core.

Essas tecnologias são diferentes do .NET nativo, pois são executadas usando o tempo de execução CoreCLR (usado na Plataforma Universal do Windows ).

Como você mencionou na sua pergunta, o .NET Core não é apenas de código aberto, mas também portátil [roda em MacOS, Windows e Linux]

Os componentes internos do .NET Core também são otimizados para não usar módulos diferentes de sua biblioteca principal, a menos que seja exigido pelo aplicativo.

Salah Alshaal
fonte
4
".NET Núcleo refere-se a várias tecnologias, incluindo .NET núcleo" ... uma grande coisa
Kieren Johnstone
3

A Microsoft acaba de anunciar o .NET Core v 3.0, que é uma versão muito aprimorada do .NET Core.

Para obter mais detalhes, visite este excelente artigo: Diferença entre o .NET Framework e o .NET Core a partir de abril de 2019.

itsikha
fonte
3
Respostas somente de links e principalmente respostas baseadas em opiniões são fortemente desencorajadas . Consulte meta.stackexchange.com/a/8259
bip duplo
Entendi, editei a parte da opinião .. obrigado por me informar.
itsikha
1
Melhorado de que maneira? Você pode fornecer um resumo do que considera as mudanças e acréscimos mais importantes?
Peter Mortensen
3

O .NET Core é uma estrutura de software de computador gerenciado de código aberto e gratuito para sistemas operacionais Windows, Linux e macOS. É um sucessor de código aberto e multiplataforma para o .NET Framework.

Os aplicativos .NET Core são suportados no Windows, Linux e macOS. Em resumo, o .NET Core é semelhante ao .NET framework, mas é multiplataforma, ou seja, permite que os aplicativos .NET sejam executados no Windows, Linux e MacOS. Os aplicativos .NET Framework podem ser executados apenas no sistema Windows. Portanto, a diferença básica entre o .NET Framework e o .NET Core é que o .NET Core é multiplataforma e o .NET Framework é executado apenas no Windows.

Além disso, o .NET Core possui injeção de dependência interna da Microsoft e você não precisa usar arquivos de software / DLL de terceiros para injeção de dependência.

Waleed Naveed
fonte
1
Você pode elaborar sobre a injeção de dependência? O que isso realmente significa neste contexto? Você está se referindo a estruturas específicas? Você tem algumas referências / links?
Peter Mortensen
1

O .NET Core é uma versão de código aberto e de plataforma cruzada do .NET. Os produtos da Microsoft, além das grandes habilidades que eles têm, sempre foram caros para os usuários comuns, especialmente os usuários finais dos produtos fabricados pelas tecnologias .NET.

A maioria dos clientes de baixo nível prefere usar o Linux como sistema operacional e, antes do .NET Core, eles não gostariam de usar as tecnologias da Microsoft, apesar das grandes habilidades deles. Porém, após a produção do .NET Core, esse problema foi resolvido completamente e podemos satisfazer nossos clientes sem considerar o SO, etc.

sajadre
fonte
Não é resolvido completamente. Você terá dificuldade em usar um aplicativo Windows Forms ou WPF no Linux.
Peter Mortensen
0

O .NET Core é uma versão de código aberto e de plataforma cruzada do .NET Framework.

JEuvin
fonte