Guia do .NET Core.NET Core Guide

Confira os Tutoriais de "Introdução" para aprender a criar um aplicativo .NET Core simples.Check out the "Getting Started" tutorials to learn how to create a simple .NET Core application. Bastam apenas alguns minutos para colocar seu primeiro aplicativo em funcionamento.It only takes a few minutes to get your first app up and running.

O .NET Core é uma plataforma de desenvolvimento de uso geral mantida pela Microsoft e pela comunidade .NET no GitHub..NET Core is a general purpose development platform maintained by Microsoft and the .NET community on GitHub. Ele é de plataforma cruza e dá suporte ao Windows, macOS e Linux, e podendo ser usado no dispositivo, na nuvem e em cenários inserido/IoT.It is cross-platform, supporting Windows, macOS and Linux, and can be used in device, cloud, and embedded/IoT scenarios.

As seguintes características são as que melhor definem o .NET Core:The following characteristics best define .NET Core:

  • Implantação flexível: pode ser incluído no seu aplicativo ou ser instalado lado a lado no usuário ou em todos os computadores.Flexible deployment: Can be included in your app or installed side-by-side user- or machine-wide.
  • Multiplataforma: o .NET Core pode ser executado em Windows, macOS e Linux e pode ser transferido para outros sistemas operacionais.Cross-platform: Runs on Windows, macOS and Linux; can be ported to other operating systems. Os sistemas operacionais com suporte, CPUs e cenários de aplicação serão ampliados com os passar do tempo, fornecidos pela Microsoft, outras empresas e outros indivíduos.The supported Operating Systems (OS), CPUs and application scenarios will grow over time, provided by Microsoft, other companies, and individuals.
  • Ferramentas de linha de comando: todos os cenários de produto podem ser exercidos na linha de comando.Command-line tools: All product scenarios can be exercised at the command-line.
  • Compatibilidade: o .NET Core é compatível com .NET Framework, Xamarin e Mono por meio da .NET Standard.Compatible: .NET Core is compatible with .NET Framework, Xamarin and Mono, via the .NET Standard.
  • Código-fonte aberto: a plataforma do .NET Core é um software livre que usa licenças do MIT e Apache 2.Open source: The .NET Core platform is open source, using MIT and Apache 2 licenses. A documentação é licenciada por CC-BY.Documentation is licensed under CC-BY. O .NET Core é um projeto do .NET Foundation..NET Core is a .NET Foundation project.
  • Suporte da Microsoft: .NET Core tem suporte pela Microsoft, pelo Suporte do .NET CoreSupported by Microsoft: .NET Core is supported by Microsoft, per .NET Core Support

ComposiçãoComposition

O .NET Core é composto pelas seguintes partes:.NET Core is composed of the following parts:

  • Um tempo de execução .NET que fornece um sistema de tipo, carregamento de assembly, coletor de lixo, interoperabilidade nativa e outros serviços básicos.A .NET runtime, which provides a type system, assembly loading, a garbage collector, native interop and other basic services.
  • Um conjunto de bibliotecas de estruturas que fornece tipos de dados primitivos, tipos de composição de aplicativos e utilitários fundamentais.A set of framework libraries, which provide primitive data types, app composition types and fundamental utilities.
  • Um conjunto de ferramentas de SDK e compiladores de linguagem (Roslyn e F#) que possibilitam a experiência de desenvolvedor básica, disponíveis no SDK do .NET Core.A set of SDK tools and language compilers (Roslyn and F#) that enable the base developer experience, available in the .NET Core SDK.
  • O host de aplicativo “dotnet” usado para iniciar aplicativos .NET Core.The 'dotnet' app host, which is used to launch .NET Core apps. Ele seleciona e hospeda o tempo de execução, fornece políticas de carregamento de assembly e inicia o aplicativo.It selects the runtime and hosts the runtime, provides an assembly loading policy and launches the app. O mesmo host também é usado para abrir as ferramentas de SDK da mesma maneira.The same host is also used to launch SDK tools in much the same way.

LinguagensLanguages

As linguagens C#,Visual Basic e F# podem ser usadas para escrever aplicativos e bibliotecas para o .NET Core.The C#, Visual Basic, and F# languages can be used to write applications and libraries for .NET Core. Os compiladores são executados no .NET Core, permitindo que você desenvolva soluções para .NET Core em qualquer lugar que ele seja executado.The compilers run on .NET Core, enabling you to develop for .NET Core anywhere it runs. Em geral, você não usará os compiladores diretamente, mas sim indiretamente, usando as ferramentas de SDK.In general, you will not use the compilers directly, but indirectly using the SDK tools.

Os compiladores de C#, Visual Basic e F#, bem como as ferramentas do .NET Core, já estão ou podem ser integradas em vários editores de texto e IDEs, incluindo o Visual Studio, Visual Studio Code, Sublime Text e Vim, tornando o desenvolvimento no .NET Core uma boa opção em seus ambientes de codificação e sistemas operacionais favoritos.The C#, Visual Basic, and F# compilers and the .NET Core tools are or can be integrated into several text editors and IDEs, including Visual Studio, Visual Studio Code, Sublime Text and Vim, making .NET Core development an option in your favorite coding environment and OS. Essa integração é fornecida, em parte, pelo pessoal do projeto OmniSharp e do Ionide.This integration is provided, in part, by the good folks of the OmniSharp project and Ionide.

APIs e compatibilidade do .NET.NET APIs and Compatibility

O .NET Core pode ser pensado como uma versão de plataforma cruzada do .NET Framework, na camada da BCL (Biblioteca de Classes Base) do .NET Framework..NET Core can be thought of as a cross-platform version of the .NET Framework, at the layer of the .NET Framework Base Class Libraries (BCL). Ele implementa a especificação .NET Standard.It implements the .NET Standard specification. O .NET Core fornece um subconjunto das APIs que estão disponíveis no .NET Framework ou Mono/Xamarin..NET Core provides a subset of the APIs that are available in the .NET Framework or Mono/Xamarin. Em alguns casos, os tipos não são implementados completamente (alguns membros não estão disponíveis ou foram movidos).In some cases, types are not fully implemented (some members are not available or have been moved).

Veja o Roteiro do .NET Core para saber mais sobre o roteiro da API do .NET Core.Look at the .NET Core roadmap to learn more about the .NET Core API roadmap.

Relacionamento com o .NET StandardRelationship to .NET Standard

O .NET Standard é uma especificação de API que descreve o conjunto coerente de APIs .NET que os desenvolvedores podem esperar em cada implementação do .NET.The .NET Standard is an API spec that describes the consistent set of .NET APIs that developers can expect in each .NET implementation. Implementações do .NET precisam implantar essa especificação para serem consideradas em conformidade com o .NET Standard e para dar suporte a bibliotecas voltadas para o .NET Standard..NET implementations need to implement this spec in order to be considered .NET Standard-compliant and to support libraries that target .NET Standard.

O .NET Core implementa o .NET Standard e, portanto, dá suporte a bibliotecas do .NET Standard..NET Core implements .NET Standard, and therefore supports .NET Standard libraries.

Cargas de trabalhoWorkloads

Por si só, o .NET Core inclui um modelo de aplicativo único, os aplicativos de console, que são úteis para ferramentas, serviços locais e os jogos baseados em texto.By itself, .NET Core includes a single application model -- console apps -- which is useful for tools, local services and text-based games. Modelos de aplicativo adicionais foram criados junto ao .NET Core para estender sua funcionalidade, como:Additional application models have been built on top of .NET Core to extend its functionality, such as:

Software LivreOpen Source

O .NET Core é um software livre (licença MIT) e foi concedido ao .NET Foundation pela Microsoft em 2014..NET Core is open source (MIT license) and was contributed to the .NET Foundation by Microsoft in 2014. Agora ele é um dos projetos mais ativos do .NET Foundation.It is now one of the most active .NET Foundation projects. Ele pode ser adotado livremente por pessoas e empresas, incluindo para fins pessoais, comerciais ou acadêmicos.It can be freely adopted by individuals and companies, including for personal, academic or commercial purposes. Várias empresas usam o .NET Core como parte de aplicativos, ferramentas, novas plataformas e serviços de hospedagem.Multiple companies use .NET Core as part of apps, tools, new platforms and hosting services. Algumas dessas empresas fazer contribuições significativas para o .NET Core no GitHub e fornecem diretrizes sobre a direção de produto como parte do .NET Foundation Technical Steering Group.Some of these companies make significant contributions to .NET Core on GitHub and provide guidance on the product direction as part of the .NET Foundation Technical Steering Group.

AquisiçãoAcquisition

O .NET Core é distribuído de duas maneiras principais, como pacotes no NuGet.org e como distribuições autônomas..NET Core is distributed in two main ways, as packages on NuGet.org and as standalone distributions.

DistribuiçõesDistributions

Você pode baixar o .NET Core na página Introdução ao .NET Core.You can download .NET Core at the .NET Core Getting Started page.

  • A distribuição Microsoft .NET Core inclui o tempo de execução do CoreCLR, bibliotecas associadas, um host de aplicativo de console e o inicializador de aplicativos do dotnet.The Microsoft .NET Core distribution includes the CoreCLR runtime, associated libraries, a console application host and the dotnet app launcher. Ele é descrito pelo metapacote Microsoft.NETCore.App.It is described by the Microsoft.NETCore.App metapackage.
  • A distribuição do SDK do Microsoft .NET Core inclui o .NET Core e um conjunto de ferramentas para restaurar pacotes NuGet e compilar e criar aplicativos.The Microsoft .NET Core SDK distribution includes .NET Core and a set of tools for restoring NuGet packages and compiling and building apps.

Normalmente, você primeiro instala a introdução ao SDK do .NET Core com desenvolvimento de .NET Core.Typically, you will first install the .NET Core SDK to get started with .NET Core development. Você pode optar por instalar compilações adicionais (talvez pré-lançamento) do .NET Core.You may choose to install additional .NET Core (perhaps pre-release) builds.

PacotesPackages

  • Pacotes do .NET Core contêm o tempo de execução e as bibliotecas do .NET Core (implementações e assemblies de referência)..NET Core Packages contain the .NET Core runtime and libraries (reference assemblies and implementations). Por exemplo, System.Net.Http.For example, System.Net.Http.
  • Metapacotes do .NET Core descrevem várias camadas e modelos de aplicativo referenciando o conjunto apropriado de pacotes de biblioteca com versão..NET Core Metapackages describe various layers and app-models by referencing the appropriate set of versioned library packages.

ArquiteturaArchitecture

O .NET Core é uma implementação de plataforma cruzada do .NET..NET Core is a cross-platform .NET implementation. As principais questões de arquitetura exclusivas do .NET Core são referentes a implementações específicas de plataforma para as plataformas com suporte.The primary architectural concerns unique to .NET Core are related to providing platform-specific implementations for supported platforms.

AmbientesEnvironments

O .NET Core tem suporte com o Microsoft no Windows, macOS e Linux..NET Core is supported by Microsoft on Windows, macOS and Linux. No Linux, a Microsoft dá suporte principalmente ao .NET Core executado em famílias de distribuição do RHEL (Red Hat Enterprise Linux) ou Debian.On Linux, Microsoft primarily supports .NET Core running on Red Hat Enterprise Linux (RHEL) and Debian distribution families.

O .NET Core dá suporte a CPUs X64 no momento..NET Core currently supports X64 CPUs. No Windows, também há suporte para X86.On Windows, X86 is also supported. O suporte para ARM64 e ARM32 está em andamento.ARM64 and ARM32 are in progress.

O Roteiro do .NET Core fornece informações mais detalhadas sobre a carga de trabalho e suporte e planos do ambiente do sistema operacional e de CPU.The .NET Core Roadmap provides more detailed information on workload and OS and CPU environment support and plans.

Outras empresas ou grupos podem dar suporte a .NET Core para outros tipos de aplicativos e ambientes.Other companies or groups may support .NET Core for other app types and environment.

Projetado para adaptaçãoDesigned for Adaptability

O .NET Core foi criado como um produto muito semelhante, porém único, em relação a outros produtos .NET..NET Core has been built as a very similar but unique product relative to other .NET products. Ele foi projetado para possibilitar ampla adaptação a novas plataformas, para novas cargas de trabalho e com novas cadeias de ferramentas do compilador.It has been designed to enable broad adaptability to new platforms, for new workloads and with new compiler toolchains. Ele tem portas de vários sistemas operacionais e CPU em andamento e pode ser levado para muitos outros.It has several OS and CPU ports in progress and may be ported to many more. Um exemplo é o projeto LLILC, que é um protótipo inicial da compilação nativa para .NET Core por meio do compilador LLVM.An example is the LLILC project, which is an early prototype of native compilation for .NET Core via the LLVM compiler.

O produto é dividido em várias partes, permitindo que essas sejam adaptadas para novas plataformas em diferentes agendas.The product is broken into several pieces, enabling the various parts to be adapted to new platforms on different schedules. O tempo de execução e as bibliotecas fundamentais específicas de plataformas devem ser transportados como uma unidade.The runtime and platform-specific foundational libraries must be ported as a unit. Bibliotecas independentes de plataforma devem funcionar no estado em que se encontra em todas as plataformas como-está em todas as plataformas desde a construção.Platform-agnostic libraries should work as-is on all platforms, by construction. Há uma tendência de projeto em reduzir as implementações específicas de plataforma para aumentar a eficiência dos desenvolvedores, preferindo código C# neutro com relação à plataforma sempre que um algoritmo ou API puder ser implementado dessa maneira de forma total ou parcial.There is a project bias to reducing platform-specific implementations to increase developer efficiency, preferring platform-neutral C# code whenever an algorithm or API can be implemented in-full or in-part that way.

As pessoas geralmente perguntam como o .NET Core é implementado para dar suporte a vários sistemas operacionais.People commonly ask how .NET Core is implemented in order to support multiple operating systems. Eles normalmente perguntam se há implementações separadas ou se a compilação condicional é usada.They typically ask if there are separate implementations or if conditional compilation is used. A resposta é ambas, com uma forte tendência para a compilação condicional.It's both, with a strong bias towards conditional compilation.

Você pode ver no gráfico abaixo que a maior parte do CoreFX é um código neutro compartilhado entre todas as plataformas.You can see in the chart below that the vast majority of CoreFX is platform-neutral code that is shared across all platforms. O código neutro com relação à plataforma pode ser implementado como um único assembly portátil usado em todas as plataformas.Platform-neutral code can be implemented as a single portable assembly that is used on all platforms.

CoreFX: Linhas de código por plataforma

Implementações de Windows e Unix são semelhantes em tamanho.Windows and Unix implementations are similar in size. O Windows tem uma implementação maior, pois o CoreFX implementa alguns recursos exclusivos do Windows como o Microsoft.Win32.Registry, mas ainda não implementa nenhum conceito exclusivo do Unix.Windows has a larger implementation since CoreFX implements some Windows-only features, such as Microsoft.Win32.Registry but does not yet implement any Unix-only concepts. Você também verá que a maioria das implementações do Linux e do macOS são compartilhadas com uma implementação do Unix, enquanto as implementações específicas de Linux e macOS são semelhantes em tamanho.You will also see that the majority of the Linux and macOS implementations are shared across a Unix implementation, while the Linux- and macOS-specific implementations are roughly similar in size.

Há uma combinação de bibliotecas específicas ou neutras de plataforma no .NET Core.There are a mix of platform-specific and platform-neutral libraries in .NET Core. Você pode observar esse padrão em alguns exemplos:You can see the pattern in a few examples:

Comparações com outras implementações do .NETComparisons to other .NET implementations

Talvez seja mais fácil entender o tamanho e a forma do .NET Core ao compará-lo com as implementações do .NET existentes.It is perhaps easiest to understand the size and shape of .NET Core by comparing it to existing .NET implementations.

Comparação com o .NET FrameworkComparison with .NET Framework

O .NET foi anunciado pela primeira vez pela Microsoft em 2000 e continuou evoluindo a partir daí..NET was first announced by Microsoft in 2000 and then evolved from there. O .NET Framework foi a principal implementação do .NET produzida pela Microsoft durante esse período de mais de 15 anos.The .NET Framework has been the primary .NET implementation produced by Microsoft during that 15+ year span.

Principais diferenças entre o .NET Core e o .NET Framework:The major differences between .NET Core and the .NET Framework:

  • Modelos de aplicativo – O .NET Core não dá suporte a todos os modelos de aplicativo .NET Framework, em parte porque muitos deles são criados em tecnologias do Windows, como o WPF (baseado no DirectX).App-models -- .NET Core does not support all the .NET Framework app-models, in part because many of them are built on Windows technologies, such as WPF (built on top of DirectX). O console e os modelos de aplicativo do ASP.NET Core são compatíveis com o .NET Core e o .NET Framework.The console and ASP.NET Core app-models are supported by both .NET Core and .NET Framework.
  • APIs – O .NET Core contém várias das mesmas APIs que o .NET Framework, porém em menor quantidade e com assinaturas diferentes (os nomes de assembly são diferentes e a forma dos tipos diferem em casos principais).APIs -- .NET Core contains many of the same, but fewer, APIs as the .NET Framework, and with a different factoring (assembly names are different; type shape differs in key cases). No momento, essas diferenças normalmente exigem alterações no código para .NET Core.These differences currently typically require changes to port source to .NET Core. O .NET Core implementa a API .NET Standard, que crescerá para incluir mais funcionalidades da API BCL do .NET Framework ao longo do tempo..NET Core implements the .NET Standard API, which will grow to include more of the .NET Framework BCL API over time.
  • Subsistemas – O.NET Core implementa um subconjunto dos subsistemas no .NET Framework com o objetivo de proporcionar uma implementação e um modelo de programação mais simples.Subsystems -- .NET Core implements a subset of the subsystems in the .NET Framework, with the goal of a simpler implementation and programming model. Por exemplo, não há suporte para CAS (Segurança de Acesso do Código), porém há suporte para reflexão.For example, Code Access Security (CAS) is not supported, while reflection is supported.
  • Plataformas – O .NET Framework dá suporte a Windows e Windows Server, enquanto o .NET Core também dá suporte a macOS e Linux.Platforms -- The .NET Framework supports Windows and Windows Server while .NET Core also supports macOS and Linux.
  • Software Livre – O .NET Core é um software livre, enquanto apenas um subconjunto somente leitura do .NET Framework é um software livre.Open Source -- .NET Core is open source, while a read-only subset of the .NET Framework is open source.

Embora o .NET Core seja único e apresente diferenças significativas em relação ao .NET Framework e a outras implementações do .NET, é muito fácil compartilhar o código usando técnicas de compartilhamento de binários ou de fontes.While .NET Core is unique and has significant differences to the .NET Framework and other .NET implementations, it is straightforward to share code, using either source or binary sharing techniques.

Comparação com MonoComparison with Mono

O Mono é a implementação .NET de plataforma cruzada e de software livre original, sendo fornecido pela primeira vez em 2004.Mono is the original cross-platform and open source .NET implementation, first shipping in 2004. Ele pode ser considerado um clone de comunidade do .NET Framework.It can be thought of as a community clone of the .NET Framework. A equipe de projeto do Mono contava com padrões .NET (especificamente o ECMA 335) publicados pela Microsoft a fim de fornecer uma implementação compatível.The Mono project team relied on the open .NET standards (notably ECMA 335) published by Microsoft in order to provide a compatible implementation.

Principais diferenças entre o .NET Core e o Mono:The major differences between .NET Core and Mono:

  • Modelos de aplicativo – O Mono dá suporte a um subconjunto de modelos de aplicativo do .NET Framework (por exemplo, o Windows Forms) e a alguns outros (como o Xamarin.iOS) por meio do produto Xamarin.App-models -- Mono supports a subset of the .NET Framework app-models (for example, Windows Forms) and some additional ones (for example, Xamarin.iOS) through the Xamarin product. O .NET Core não dá suporte a eles..NET Core doesn't support these.
  • APIs – O Mono dá suporte a um grande subconjunto das APIs do .NET Framework, usando os mesmos nomes de assembly e fatoração.APIs -- Mono supports a large subset of the .NET Framework APIs, using the same assembly names and factoring.
  • Plataformas – O Mono dá suporte a várias plataformas e CPUs.Platforms -- Mono supports many platforms and CPUs.
  • Software Livre – O Mono e o .NET Core usam a licença MIT e são projetos do .NET Foundation.Open Source -- Mono and .NET Core both use the MIT license and are .NET Foundation projects.
  • Foco – O principal foco do Mono nos últimos anos são as plataformas móveis, enquanto o .NET Core é voltado para cargas de trabalho na nuvem.Focus -- The primary focus of Mono in recent years is mobile platforms, while .NET Core is focused on cloud workloads.