O que é o .NET? Introdução e visão geral

O .NET é uma plataforma de desenvolvimento de software livre gratuita para a criação de vários tipos de aplicativos, como:

Compartilhe a funcionalidade entre diferentes aplicativos e tipos de aplicativos usando bibliotecas de classes.

Com o .NET, seus arquivos de código e de projeto parecem e sentem o mesmo, independentemente do tipo de aplicativo que você está criando. Você tem acesso aos mesmos recursos de tempo de execução, API e linguagem com cada aplicativo.

Plataforma cruzada

Você pode criar aplicativos .NET para muitos sistemas operacionais, incluindo:

  • Windows
  • macOS
  • Linux
  • Android
  • iOS
  • tvOS
  • watchOS

As arquiteturas de processador com suporte incluem:

  • x64
  • x86
  • ARM32
  • ARM64

O .NET permite que você use recursos específicos da plataforma, como APIs do sistema operacional. os exemplos são Windows Forms e WPF em Windows e as ligações nativas para cada plataforma móvel do Xamarin.

Para obter mais informações, consulte política de ciclo de vida do so com suporte e Catálogo de RID do .net.

Gratuito e código aberto

O .NET é gratuito e de software livre, usando licenças MIT e Apache 2. O .NET é um projeto do .net Foundation.

para obter mais informações, consulte a lista de repositórios do projeto em GitHub. com.

Suporte

o .net tem suporte da Microsoft em Windows, macOS e Linux. Ele é atualizado regularmente para segurança e qualidade, na segunda terça-feira de cada mês.

As distribuições binárias do .NET da Microsoft são criadas e testadas em servidores mantidos pela Microsoft no Azure e seguem práticas de engenharia e segurança da Microsoft.

o Red Hat dá suporte ao .net em Red Hat Enterprise Linux (RHEL). Red Hat e Microsoft colaboram para garantir que o .NET Core funcione bem no RHEL.

O tizen dá suporte ao .net em plataformas tizen.

Para obter mais informações, consulte versões e suporte para .NET Core e .NET 5.

.net Core, .NET Framework, Mono, UWP

O .NET é fornecido em diferentes tipos, mais conhecido como implementações. O .NET 5 + (incluindo o .NET Core) é a implementação mais recente e é executado em qualquer plataforma. .NET Framework é a implementação original do .net e é executada somente em Windows. O mono é usado quando um tempo de execução pequeno é necessário. Plataforma Universal do Windows (UWP) é usado para criar aplicativos modernos Windows.

Cada implementação inclui um tempo de execução e uma biblioteca de classes. Ele também pode incluir estruturas de aplicativo e ferramentas de desenvolvimento.

.NET Standard não é uma implementação do .NET, mas sim uma especificação de API que permite desenvolver bibliotecas de classes para várias implementações do .NET.

Para obter mais informações, consulte implementações do .net.

Ferramentas e produtividade

O .NET oferece a você uma opção de linguagens, IDEs (ambientes de desenvolvimento integrados) e outras ferramentas.

Linguagens de programação

O .NET dá suporte a três linguagens de programação:

  • C#

    O C# (pronuncia-se "Veja nítido") é uma linguagem de programação moderna, orientada a objeto e de tipo seguro. O C# tem suas raízes na família de linguagens C e os programadores em C, C++, Java e JavaScript a reconhecerão imediatamente.

  • F#

    O F # é uma linguagem de programação de software livre, de plataforma cruzada e interoperável para escrever código sucinto, robusto e de alto desempenho. Seu foco permanece em seu domínio problemático, em vez dos detalhes da programação. A programação F # é orientada a dados, em que o código envolve a transformação de dados com funções.

  • Visual Basic

    entre as linguagens do .net, a sintaxe do Visual Basic é mais próxima da linguagem humana comum, o que pode facilitar o aprendizado. ao contrário do C# e F #, para os quais a Microsoft está desenvolvendo ativamente novos recursos, a linguagem Visual Basic é estável. não há suporte para Visual Basic para aplicativos web, mas há suporte para APIs web.

Aqui estão alguns dos recursos com suporte nas linguagens .NET:

IDEs

Os ambientes de desenvolvimento integrados para .NET incluem:

  • Visual Studio

    só é executado em Windows. Tem ampla funcionalidade interna projetada para funcionar com o .NET. a edição Community é gratuita para estudantes, colaboradores de software livre e indivíduos.

  • Visual Studio Code

    é executado em Windows, macOS e Linux. Gratuito e software livre. As extensões estão disponíveis para trabalhar com linguagens .NET.

  • Visual Studio para Mac

    É executado somente no macOS. Para desenvolver aplicativos e jogos .NET para iOS, Android e Web.

  • Codespaces do GitHub

    Um ambiente Visual Studio Code online, atualmente em beta.

SDK e runtimes

O SDK do .NET é um conjunto de bibliotecas e ferramentas para desenvolver e executar aplicativos .NET.

Ao baixar o .NET, você pode escolher o SDK ou um runtime, como o runtime do .NET ou o ASP.NET Core runtime.

  • Instale um runtime, que é o ambiente de execução de um programa gerenciado, em um computador que você deseja preparar para executar aplicativos .NET.
  • Instale o SDK em um computador que você deseja usar para desenvolvimento. Ao baixar o SDK, você obterá automaticamente os runtimes com ele.

O download do SDK inclui os seguintes componentes:

  • A CLI do .NET. Ferramentas de linha de comando que você pode usar para scripts de desenvolvimento local e integração contínua.
  • O dotnetdotnet. Um comando da CLI que executa aplicativos dependentes de estrutura.
  • Os compiladores de linguagem de programação Roslyn e F #.
  • O MSBuild de build.
  • O runtime do .NET. Fornece um sistema de tipos, carregamento de assembly, coletor de lixo, interop nativa e outros serviços básicos.
  • Bibliotecas de runtime. Fornece tipos de dados primitivos e utilitários fundamentais.
  • O ASP.NET Core runtime. Fornece serviços básicos para aplicativos conectados à Internet, como aplicativos Web, aplicativos IoT e back-ends móveis.
  • O runtime da área de trabalho. Fornece serviços básicos para Windows de área de trabalho, incluindo Windows Forms e WPF.

O download de runtime inclui os seguintes componentes:

  • Opcionalmente, a área de trabalho ou ASP.NET Core runtime.
  • O runtime do .NET. Fornece um sistema de tipos, carregamento de assembly, coletor de lixo, interop nativa e outros serviços básicos.
  • Bibliotecas de runtime. Fornece tipos de dados primitivos e utilitários fundamentais.
  • O dotnetdotnet. Um comando da CLI que executa aplicativos dependentes de estrutura.

Para saber mais, consulte os recursos a seguir:

Project sistema e MSBuild

Um aplicativo .NET é criado com base no código-fonte usando MSBuild. Um arquivo de projeto (.csproj, .fsproj ou .vbproj) especifica destinos e tarefas associadas que são responsáveis por compilar, empacotar e publicar código. Há identificadores do SDK que se referem a coleções padrão de destinos e tarefas. O uso desses identificadores ajuda a manter os arquivos de projeto pequenos e fáceis de trabalhar. Por exemplo, aqui está um arquivo de projeto para um aplicativo de console:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>
</Project>

E aqui está um para um aplicativo Web:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>
</Project>

Nesses exemplos, o Sdk atributo do elemento Project especifica um conjunto de MSBuild destinos e tarefas que com base no projeto. O TargetFramework elemento especifica a versão do .NET da que o aplicativo depende. Você pode editar o arquivo de projeto para adicionar destinos e tarefas adicionais específicos ao projeto.

Para obter mais informações, consulte Visão geral do SDK do projeto .NET e Estruturas de destino.

CI/CD

MSBuild e a CLI do .NET podem ser usadas com várias ferramentas e ambientes de integração contínua, como:

Para obter mais informações, consulte Using .NET SDK and tools in Continuous Integration (CI)

NuGet

NuGet é um gerenciador de pacotes de código aberto projetado para .NET. Um pacote NuGet é um arquivo.zipcom a extensão que contém DLLs (código compilado), outros arquivos relacionados a esse código e um manifesto descritivo que inclui informações como o número de versão do pacote. Os desenvolvedores com código para compartilhar criam pacotes e publicam-nos nuget.org ou em um host privado. Os desenvolvedores que querem usar o código compartilhado adicionam um pacote ao projeto e, em seguida, podem chamar a API exposta pelo pacote em seu código de projeto.

Para obter mais informações, consulte NuGet documentação.

.NET Interativo

O .NET Interactive é um grupo de ferramentas e APIs da CLI que permitem que os usuários criem experiências interativas na Web, markdown e notebooks.

Para saber mais, consulte os recursos a seguir:

Modelos de execução

Os aplicativos .NET executarão código gerenciado em um ambiente de runtime conhecido como CLR (Common Language Runtime).

CLR

O CLR do .NET é um runtime de plataforma cruzada que inclui suporte para Windows, macOS e Linux. O CLR manipula a alocação e o gerenciamento de memória. O CLR também é uma máquina virtual que não apenas executa aplicativos, mas também gera e compila código usando um compilador JIT (Just-In-Time).

Para obter mais informações, consulte Visão geral do CLR (Common Language Runtime).

Compilador JIT e IL

As linguagens .NET de nível mais alto , como C#, são compiladas em um conjunto de instruções independente de hardware, que é chamado de IL (linguagem intermediária). Quando um aplicativo é executado, o compilador JIT converte IL em código de computador que o processador entende. A compilação JIT ocorre no mesmo computador em que o código será executado.

Como a compilação JIT ocorre durante a execução do aplicativo, o tempo de compilação faz parte do tempo de execução. Portanto, os compiladores JIT têm que equilibrar o tempo gasto otimizando o código em relação à economia que o código resultante pode produzir. Mas um compilador JIT conhece o hardware real e pode liberar os desenvolvedores de ter que enviar implementações diferentes para diferentes plataformas.

O compilador JIT do .NET pode fazer a compilação em camadas , o que significa que ele pode recompilar métodos individuais em tempo de execução. Esse recurso permite que ele seja compilado rapidamente e ainda seja capaz de produzir uma versão altamente ajustada do código para métodos usados com frequência.

Para obter mais informações, consulte Processo de execução gerenciada ecompilação em camadas.

Compilador AOT

A experiência padrão para a maioria das cargas de trabalho do .NET é o compilador JIT, mas o .NET oferece duas formas de compilação antecipada (AOT) :

  • Alguns cenários exigem compilação 100% AOT. Um exemplo é o iOS.
  • Em outros cenários, a maioria do código de um aplicativo é compilada por AOT, mas algumas são compiladas por JIT. Alguns padrões de código não são amigáveis com a AOT (como genéricos). Um exemplo dessa forma de compilação de AOT é a opção de publicação pronta para executar. Essa forma de AOT oferece os benefícios da AOT sem suas desvantagens.

Gerenciamento automático de memória

O GC (coletor de lixo) gerencia a alocação e a liberação de memória para aplicativos. Sempre que o código cria um novo objeto, o CLR aloca memória para o objeto do heap gerenciado. Desde que exista espaço de endereço disponível no heap gerenciado, o runtime continua alocando espaço para novos objetos. Quando não há espaço de endereço livre suficiente, o GC verifica se há objetos no heap gerenciado que não estão mais sendo usados pelo aplicativo. Em seguida, ele recupera essa memória.

O GC é um dos serviços CLR que ajudam a garantir a segurança da memória. Um programa é considerado de memória segura se ele acessa somente a memória alocada. Por exemplo, o runtime garante que um aplicativo não acesse memória não alocada além dos limites de uma matriz.

Para obter mais informações, consulte gerenciamento automático de memória e conceitos básicos da coleta de lixo.

Trabalhando com recursos não gerenciados

Às vezes, o código precisa fazer referência a recursos não gerenciados. Os recursos não gerenciados são recursos que não são mantidos automaticamente pelo runtime do .NET. Por exemplo, um identificador de arquivo é um recurso não gerenciado. Um objeto FileStream é um objeto gerenciado, mas ele faz referência a um identificador de arquivo, que não é gerenciado. Quando terminar de usar o FileStream , você precisará liberar explicitamente o identificador de arquivo.

No .NET, objetos que fazem referência a recursos não gerenciados implementam a interface IDisposable. Quando você termina de usar o objeto, você chama o método Dispose() do objeto, responsável por liberar quaisquer recursos não gerenciados. As linguagens .NET fornecem uma instrução conveniente using (using, F #, VB) que garante que o método seja chamado.

Para obter mais informações, consulte limpando recursos não gerenciados.

Modelos de implantação

Os aplicativos .NET podem ser publicados em dois modos diferentes:

  • A publicação de um aplicativo como independente produz um arquivo executável que inclui o tempo de execução e as bibliotecasdo .net e o aplicativo e suas dependências. Os usuários do aplicativo podem executá-lo em um computador que não tenha o runtime do .NET instalado. Os aplicativos independentes são específicos da plataforma e, opcionalmente, podem ser publicados usando uma forma de compilação AOT.

  • A publicação de um aplicativo como dependente da estrutura produz um arquivo executável e arquivos binários (.dll arquivos) que incluem apenas o aplicativo em si e suas dependências. Os usuários do aplicativo precisam instalar o tempo de execuçãodo .net separadamente. O arquivo executável é específico da plataforma, mas os .dll arquivos de aplicativos dependentes da estrutura são de plataforma cruzada.

    Você pode instalar várias versões do tempo de execução lado a lado para executar aplicativos dependentes da estrutura direcionados a diferentes versões do tempo de execução. Para obter mais informações, consulte estruturas de destino.

Os executáveis são produzidos para plataformas de destino específicas, que você especifica com um RID (identificador de tempo de execução).

Para obter mais informações, consulte visão geral da publicação de aplicativos .net e introdução ao .net e ao Docker.

Bibliotecas de runtime

O .NET tem um conjunto padrão de bibliotecas de classes, conhecido como bibliotecas de tempo de execução, bibliotecas de estruturasou a BCL (biblioteca de classes base). Essas bibliotecas fornecem implementações para muitos tipos específicos de carga de trabalho e de finalidade geral e funcionalidade de utilitário.

Aqui estão alguns exemplos de tipos definidos nas bibliotecas de tempo de execução do .NET:

Para obter mais informações, consulte visão geral das bibliotecas de tempo de execução. o código-fonte para as bibliotecas está no repositório GitHub dotnet/tempo de execução.

Extensões para as bibliotecas de tempo de execução

as bibliotecas para algumas funcionalidades de aplicativos comumente usadas não estão incluídas nas bibliotecas de tempo de execução, mas são disponibilizadas em pacotes NuGet, como o seguinte:

Pacote NuGet Documentação
Microsoft.Extensions.Hosting Gerenciamento de tempo de vida do aplicativo (host genérico)
Microsoft. Extensions. DependencyInjection DI (injeção de dependência)
Microsoft.Extensions.Configuration Configuration
Microsoft.Extensions.Logging Logging
Microsoft. Extensions. opções Padrão de opções

Para obter mais informações, consulte o repositório dotnet/extensões em github.

Acesso de dados

o .net fornece um ORM (objeto/mapeador relacional) e uma maneira de escrever SQL consultas no código.

Entity Framework Core

O Entity Framework (EF) Core é uma tecnologia de acesso a dados de software livre e entre plataformas que pode servir como um ORM. EF Core permite trabalhar com um banco de dados referindo-se a objetos .NET no código. Ele reduz a quantidade de código de acesso a dados que, de outra forma, você precisaria escrever e testar. O EF Core dá suporte a vários mecanismos de banco de dados.

Para obter mais informações, consulte Entity Framework Core e provedores de banco de dados.

LINQ

A consulta integrada à linguagem (LINQ) permite que você escreva um código declarativo para operar em dados. Os dados podem ser de várias formas (como objetos na memória, um banco de dados SQL ou um documento XML), mas o código LINQ que você escreve não difere para cada fonte de dados.

Para obter mais informações, consulte visão geral do LINQ (consulta integrada à linguagem).

Terminologia

Para entender a documentação do .NET, ele pode ajudar a saber como o uso de alguns termos mudou ao longo do tempo.

.NET Core e .NET 5 +

no 2002, a Microsoft lançou o .NET Framework, uma plataforma de desenvolvimento para a criação de aplicativos Windows. hoje .NET Framework está na versão 4,8 e ainda tem suporte da Microsoft.

No 2014, a Microsoft introduziu o .NET Core como um sucessor de software livre e de plataforma cruzada para .NET Framework. Essa nova implementação do .net manteve o nome .NET Core por meio da versão 3,1. A próxima versão após o .NET Core 3,1 foi denominada .NET 5. Portanto, o .NET 5 + (o sinal de mais significa "e versões posteriores") e o .NET Core se referem a uma e à mesma implementação do .NET.

o número de versão 4 foi ignorado para evitar confusão entre .NET Framework e .net Core/5 +. O nome "Core" foi descartado do ".NET Core" para tornar claro que essa implementação do .NET agora é a principal. "Core" permanece nas versões 5 + de ASP.NET Core e Entity Framework Core.

A documentação também se refere a .NET Standard. .Net Standard é uma especificação de API que permite desenvolver bibliotecas de classes para várias implementações do .net.

Termos sobrecarregados

Algumas das terminologias do .NET podem ser confusas porque a mesma palavra é usada de maneiras diferentes em diferentes contextos. Aqui estão algumas das instâncias mais proeminentes:

  • .NET

    O .net é o termo abrangente para toda a plataforma de desenvolvimento, incluindo todas as implementações do .net. Mais recentemente, o termo .net também pode se referir especificamente à implementação do .NET que inclui todas as versões do .NET Core (1,0-3,1) e as versões posteriores que removem "Core" do nome, por exemplo, o .NET 5 e 6.

  • appmodel

    Contexto "tempo de execução" significando
    CLR (Common Language Runtime) O ambiente de execução de um programa gerenciado. O sistema operacional faz parte do ambiente de tempo de execução, mas não faz parte do tempo de execução do .NET.
    Tempo de execução do .NET na página de download do .NET As bibliotecasCLR e Runtime, que juntas fornecem suporte para a execução de aplicativos dependentes da estrutura . a página também oferece opções de tempo de execução para aplicativos do ASP.NET Core server e Windows aplicativos da área de trabalho.
    Identificador de tempo de execução (RID) A plataforma do sistema operacional e a arquitetura de CPU em que um aplicativo .NET é executado. por exemplo: Windows x64, Linux x64.
  • estrutura

    Contexto "estrutura" significando
    .NET Framework a implementação original, somente Windows do .net. "Framework" está em letras maiúsculas.
    estrutura de destino A coleção de APIs da qual um aplicativo ou biblioteca do .NET depende. Exemplos: .NET Core 3,1, .NET Standard 2,0
    TFM (Moniker de Estrutura de Destino) Um TFM é um formato de token padronizado para especificar a estrutura de destino de um aplicativo ou biblioteca .NET. exemplo: net462 para .NET Framework 4.6.2.
    aplicativo dependente de estrutura Um aplicativo que só pode ser executado em um computador em que você instalou o tempo de execução da página de download do .net. "Estrutura" nesse uso é a mesma coisa que o "tempo de execução" que você baixa da página de download do .NET.
    bibliotecas do Framework Às vezes, usado como sinônimo para bibliotecas de tempo de execução.
  • SDK

    Contexto "SDK" significando
    SDK na página de download do .NET Uma coleção de ferramentas e bibliotecas que você baixa e instala para desenvolver e executar aplicativos .NET. inclui a CLI, MSBuild, o tempo de execução do .net e outros componentes.
    Projeto no estilo SDK um conjunto de destinos de MSBuild e tarefas que especifica como criar um projeto para um tipo de aplicativo específico. O SDK, nesse sentido, é especificado usando o Sdk atributo do Project elemento em um arquivo de projeto.
  • platform

    Contexto "plataforma" significa
    plataforma cruzada neste termo, "plataforma" significa um sistema operacional e o hardware em que ele é executado, como Windows, macOS, Linux, iOS e Android.
    Plataforma .NET O uso varia. a referência pode ser para uma implementação do .net (como .NET Framework ou .net 5 +) ou para um conceito abrangente de .net, incluindo todas as implementações.
  • CLI

    Acrônimo para Significado
    Interface de Linha de Comando Um ferramentas de plataforma cruzada para o desenvolvimento, a criação, a execução e a publicação de aplicativos .NET.
    Common Language Infrastructure Uma especificação que o CLR implementa.

Para obter mais informações sobre a terminologia do .NET, consulte o Glossário do .net.

Cenários avançados

As seções a seguir explicam alguns recursos do .NET que são úteis em cenários avançados.

Interoperabilidade nativa

Todos os sistemas operacionais incluem uma API (interface de programação de aplicativo) que fornece serviços de sistema. O .NET fornece várias maneiras de chamar essas APIs.

A principal maneira de interoperar com APIs nativas é por meio de "invocação de plataforma" ou P/Invoke para curto. P/Invoke tem suporte em plataformas Linux e Windows. uma maneira somente Windows de interoperação é conhecida como "interoperabilidade COM", que funciona com componentes com em código gerenciado. Ela foi desenvolvida com base na infraestrutura de P/Invoke, mas funciona de maneiras levemente diferentes.

Para obter mais informações, consulte interoperabilidade nativa.

Código não seguro

Dependendo do suporte da linguagem, o CLR permite acessar a memória nativa e realizar aritmética de ponteiro por meio de código unsafe. Essas operações são necessárias para certos algoritmos e interoperabilidade do sistema. Embora seja eficiente, o uso de código não seguro é desencorajado, a menos que seja necessário interoperar com as APIs do sistema ou implementar o algoritmo mais eficiente. O código não seguro pode não ser executado da mesma maneira em ambientes diferentes e também perde os benefícios de um coletor de lixo e da segurança de tipos. Recomenda-se restringir e centralizar ao máximo o código não seguro, além de testar esse código detalhadamente.

Para obter mais informações, consulte código e ponteiros sem segurança.

Próximas etapas