A Ferramenta dotnet e o NuGet

A Ferramenta dotnet e o NuGet

As ferramentas do ofício: o comando dotnet, que cria, compila, executa e testa projetos, e o arquivo de projeto que os descreve. A aula apresenta o NuGet, o repositório de bibliotecas do ecossistema .NET, e argumenta por que usar código de terceiros é uma decisão profissional.
Linguagem C#

• • 10 min de leitura

Você domina a linguagem e sabe integrá-la num programa completo. As próximas aulas o preparam para trabalhar como os programadores C# trabalham de verdade, com as ferramentas e práticas do dia a dia profissional. Começamos por duas: a ferramenta dotnet, que você vem usando desde a segunda aula sem examiná-la de perto, e o NuGet, o sistema que permite adicionar ao seu programa bibliotecas — pedaços de código prontos, escritos por outras pessoas — ampliando enormemente o que você pode fazer sem escrever tudo do zero. Compreender essas ferramentas é essencial, pois é através delas que, nas aulas finais, você conectará seus programas a bancos de dados, criará sites e muito mais. É a transição do "aprender a linguagem" para o "construir coisas reais".

A ferramenta dotnet: o canivete do programador C#

Desde a Aula #02, você usa a ferramenta dotnet no terminal, sem que a examinássemos. Ela é o canivete suíço do desenvolvimento em C#: uma única ferramenta que executa as tarefas essenciais do ciclo de vida de um programa. Você já conhece dois de seus comandos; conheçamos o conjunto principal:

dotnet new console -n MeuApp   # cria um novo projeto de console chamado MeuApp
dotnet build                   # compila o projeto (traduz o código, sem executar)
dotnet run                     # compila E executa o projeto
dotnet add package <nome>      # adiciona uma biblioteca ao projeto (via NuGet)

Cada comando cobre uma etapa do trabalho: criar um projeto, compilá-lo, executá-lo, adicionar bibliotecas. Você não precisa lembrar de configurações complicadas nem de comandos obscuros de compilação — a ferramenta dotnet conhece a estrutura do seu projeto e faz a coisa certa. O dotnet new sozinho oferece muitos modelos de projeto além do console: há modelos para bibliotecas, para aplicações web, para projetos de teste, e mais. Ao longo das aulas finais, usaremos alguns desses modelos para criar sites e outras aplicações. Por ora, o essencial é reconhecer a ferramenta dotnet como sua principal aliada na linha de comando, e conhecer seus comandos fundamentais.

O arquivo de projeto

Vale entender um pouco melhor o que o dotnet new cria. Além do arquivo de código (Program.cs), ele gera um arquivo com a extensão .csproj — o arquivo de projeto, que descreve como o programa deve ser construído. Ele é um pequeno arquivo de configuração, e num projeto moderno é bem enxuto. Você raramente precisa editá-lo à mão, mas é útil saber que ele existe e o que faz: ele define, por exemplo, qual versão do .NET o projeto usa, e — importante para esta aula — quais bibliotecas o projeto utiliza. Quando você adiciona uma biblioteca com dotnet add package, uma linha correspondente aparece automaticamente nesse arquivo, registrando aquela dependência. O .csproj é, portanto, a "ficha técnica" do seu projeto, e não uma caixa-preta: é um arquivo legível que descreve o que seu programa precisa para ser construído.

O que é uma biblioteca

Chegamos ao conceito central desta aula. Uma biblioteca é um conjunto de código pronto — classes, métodos, funcionalidades — escrito por outra pessoa (ou por uma equipe, ou pela Microsoft), que você pode adicionar ao seu programa e usar, sem precisar escrevê-lo você mesmo. Pense nisso como a diferença entre construir uma casa fabricando cada tijolo do zero e comprar tijolos, portas e janelas prontos para montar. As bibliotecas são as "peças prontas" da programação: alguém já resolveu um problema comum — ler um formato de arquivo, fazer cálculos matemáticos avançados, desenhar gráficos, conversar com um banco de dados — e disponibilizou a solução para que outros a usem.

Você já vem usando bibliotecas o tempo todo, sem perceber: o Console, a List, o LINQ, o File — tudo isso vem de bibliotecas que já acompanham o .NET (as chamadas bibliotecas padrão, que vêm incluídas). A novidade desta aula é que você pode adicionar outras bibliotecas, feitas por terceiros, para funcionalidades que o .NET não traz por padrão. E o sistema que torna isso possível, no mundo C#, é o NuGet.

O NuGet: o repositório de bibliotecas

O NuGet (pronuncia-se "niú-guét") é o repositório oficial de bibliotecas do C#: um imenso catálogo online com centenas de milhares de bibliotecas prontas, mantidas pela Microsoft e pela comunidade de programadores do mundo inteiro, todas a um comando de distância. Quando você quer adicionar uma biblioteca ao seu projeto, usa o comando dotnet add package com o nome da biblioteca, e o NuGet cuida de baixá-la e disponibilizá-la:

dotnet add package Newtonsoft.Json

Esse comando busca no NuGet a biblioteca chamada "Newtonsoft.Json" (uma biblioteca popular para trabalhar com o formato de dados JSON), baixa-a, registra-a no seu arquivo de projeto, e a torna pronta para uso. A partir daí, você pode usá-la no seu código com um using no topo do arquivo, como faz com as bibliotecas padrão:

// Depois de 'dotnet add package Newtonsoft.Json':
using Newtonsoft.Json;

var pessoa = new { Nome = "Ana", Idade = 30 };
string json = JsonConvert.SerializeObject(pessoa);   // converte o objeto em texto JSON
Console.WriteLine(json);   // {"Nome":"Ana","Idade":30}

Com uma biblioteca adicionada, você ganha acesso a todas as suas funcionalidades como se fossem parte da linguagem. É assim que, nas aulas finais, adicionaremos bibliotecas para conversar com bancos de dados e criar sites — cada uma a um dotnet add package de distância. O NuGet transforma o vasto trabalho de milhares de programadores em recursos que você aproveita com um único comando.

Por que isto é transformador

Vale apreciar o quanto as bibliotecas ampliam o que você pode fazer. Sem elas, cada programa começaria do zero absoluto, e tarefas complexas — desenhar um gráfico, processar uma imagem, criptografar dados, conectar-se a um serviço na internet — exigiriam meses de trabalho especializado. Com as bibliotecas do NuGet, boa parte desses problemas já está resolvida, testada e disponível gratuitamente, esperando você adicioná-los. Programar profissionalmente é, em grande medida, saber combinar seu próprio código com bibliotecas existentes — escrever a parte específica do seu problema e reutilizar as soluções prontas para o que é comum. Isso não é "trapacear"; é a prática normal e recomendada. Reinventar o que já existe, bem feito e testado, seria desperdício de tempo e fonte de erros. O bom programador conhece as bibliotecas disponíveis e as usa com sabedoria, dedicando seu esforço ao que é genuinamente novo no seu problema.

As ferramentas do ofício ficaram compreendidas. O comando dotnet é o canivete que cria projetos, compila, executa, testa e gerencia dependências; o arquivo de projeto é a descrição declarativa do que o projeto é e de que precisa.

O NuGet é a parte transformadora. Ele dá acesso a um enorme acervo de bibliotecas escritas e mantidas por outras pessoas, e usá-las não é atalho nem preguiça — é reconhecer que tempo gasto reimplementando um problema já resolvido é tempo não gasto no problema que só você tem. Saber procurar, avaliar e adicionar uma biblioteca é uma habilidade tão profissional quanto escrever código.

Fontes e leituras recomendadas

Exercícios

Exercício 1

Crie um projeto de console novo com dotnet new, e depois execute dotnet build e dotnet run separadamente. Explique, com suas palavras, a diferença entre o que cada um desses dois comandos faz.

Ver resposta

✓ Resposta: O dotnet build compila o projeto — traduz seu código C# para a forma que o computador executa —, mas não o executa; ele apenas verifica se o código está correto e gera os arquivos resultantes. O dotnet run faz as duas coisas: compila e executa o programa, mostrando sua saída. A diferença é que build prepara o programa sem rodá-lo (útil, por exemplo, para checar se compila sem erros), enquanto run prepara e roda de uma vez (o que usamos para ver o programa funcionando).

Exercício 2

Abra o arquivo .csproj gerado no exercício anterior e observe seu conteúdo. Você não precisa entender cada linha; identifique a que indica a versão do .NET usada, e explique, com base na aula, para que serve esse arquivo.

Ver resposta

✓ Resposta: No .csproj, a linha que indica a versão do .NET é a <TargetFramework>, com um valor como net10.0 (indicando o .NET 10). Esse arquivo serve como a "ficha técnica" do projeto: ele descreve como o programa deve ser construído — qual versão do .NET usar e quais bibliotecas o projeto utiliza. Não é uma caixa-preta, mas um arquivo de configuração legível que o dotnet consulta ao compilar e executar.

Exercício 3

Adicione a biblioteca Newtonsoft.Json ao seu projeto com dotnet add package. Depois, verifique o arquivo .csproj novamente: que mudança apareceu? Escreva um pequeno programa que use a biblioteca para converter um objeto em texto JSON (como no exemplo da aula).

Ver resposta

✓ Resposta: Após dotnet add package Newtonsoft.Json, aparece no .csproj uma nova linha (dentro de um grupo de itens) referenciando a biblioteca Newtonsoft.Json e sua versão — o registro da dependência adicionada. Um programa de exemplo:

using Newtonsoft.Json;
var obj = new { Nome = "Ana", Idade = 30 };
Console.WriteLine(JsonConvert.SerializeObject(obj));   // {"Nome":"Ana","Idade":30}

A biblioteca, uma vez adicionada e importada com using, fica disponível como se fizesse parte da linguagem.

Exercício 4

Explique, com suas palavras, o que é uma biblioteca e por que usar bibliotecas prontas é uma prática recomendada, e não "trapaça". Dê um exemplo de uma tarefa que seria muito trabalhosa de escrever do zero mas que uma biblioteca poderia resolver.

Ver resposta

✓ Resposta: Uma biblioteca é um conjunto de código pronto — classes, métodos, funcionalidades — escrito por outra pessoa, que você adiciona ao seu programa e usa sem precisar escrevê-lo do zero. Usar bibliotecas prontas é recomendado, e não trapaça, porque programar profissionalmente consiste em grande parte em combinar código próprio com soluções existentes: reaproveitar código já escrito, testado e comprovado economiza tempo e evita erros, deixando você focar no que é genuinamente novo no seu problema. Reinventar do zero algo que já existe bem feito seria desperdício e fonte de bugs. Um exemplo de tarefa trabalhosa que uma biblioteca resolve: processar ou gerar um formato de dados complexo (como JSON ou uma planilha), ou desenhar gráficos — coisas que exigiriam muito código especializado e cuidadoso, mas que uma biblioteca oferece pronto.

Exercício 5

Sem código: a aula afirma que você "já vinha usando bibliotecas o tempo todo". Cite três recursos que você usou ao longo do curso que, na verdade, vêm de bibliotecas (padrão) do .NET, e explique o que significa dizer que eles são "código pronto escrito por outras pessoas".

Ver resposta

✓ Resposta: (Exemplos válidos do curso.) Três recursos que vêm de bibliotecas padrão do .NET: o Console (para entrada e saída no terminal), a List (a coleção que cresce e encolhe), e o LINQ (Where, Select, etc.). Dizer que são "código pronto escrito por outras pessoas" significa que nenhum de nós escreveu a lógica interna que faz o Console.WriteLine exibir texto, ou a List gerenciar seus elementos, ou o Where filtrar — programadores da Microsoft escreveram esse código, testaram-no, e o incluíram nas bibliotecas que acompanham o .NET, de modo que nós apenas o usamos, aproveitando o trabalho já feito. Usamos essas peças prontas com o mesmo espírito com que, nas aulas finais, adicionaremos bibliotecas de terceiros: reaproveitando soluções existentes em vez de reescrevê-las.

Comentários

Mais em Linguagem C#

Tipos por Valor e Tipos por Referência
Tipos por Valor e Tipos por Referência

A divisão mais importante do sistema de tipos do C#: tipos por valor guardam o…

Delegates e Lambdas: Comportamento como Dado
Delegates e Lambdas: Comportamento como Dado

A ideia que desmonta a aparente mágica do LINQ: comportamento pode ser tratado…

A Grande Virada: O que É um Objeto
A Grande Virada: O que É um Objeto

A virada conceitual mais importante do curso: por que valores soltos não…