C# Instalar no Linux
As caixas Experimente do guia compilam e rodam C# no navegador, mas, para programar de verdade, você vai querer o .NET SDK no seu computador. No Linux, isso é fácil: no Ubuntu, ele está no repositório oficial, a um comando de distância. Nesta aula você instala o .NET 10 SDK no Ubuntu (e vê os comandos do Debian, do Fedora e do Arch), confere a instalação com dotnet --version e dotnet --info, vê a mensagem de boas-vindas do primeiro uso e roda o primeiro programa.
- O que é um gerenciador de pacotes e por que ele facilita tudo.
- Como descobrir se o .NET já está instalado.
- Como instalar o pacote
dotnet-sdk-10.0no Ubuntu e o que vem junto. - Os comandos do Ubuntu 24.04 e 22.04, do Debian, do Fedora, do Arch, do Snap e do script da Microsoft.
- Como conferir a instalação com
dotnet --versionedotnet --info. - O que diz a mensagem de boas-vindas que aparece no primeiro uso.
- Como testar o C# 14 com um programa.
Esta aula é para quem usa Linux. No Windows ou no macOS, veja Instalar no Windows e macOS. As saídas de terminal foram produzidas na máquina da Ana, que usa Ubuntu 26.04 com o .NET já instalado. Por isso, no ponto em que se instala de verdade, a aula mostra a simulação que o próprio apt faz, e marca como ilustrativo o que não foi rodado.
A ideia: a loja de aplicativos do Linux
No celular, você não procura aplicativos em sites aleatórios: abre a loja, procura pelo nome e toca em "Instalar". A loja baixa o aplicativo, instala, e depois avisa quando há atualização. O Linux tem isso há muito mais tempo que os celulares: é o gerenciador de pacotes. Cada programa vem num pacote, e o gerenciador baixa os pacotes de um repositório oficial da sua distribuição, com tudo de que o programa precisa para funcionar (as dependências).
| Distribuição | Gerenciador de pacotes |
|---|---|
| Ubuntu, Debian, Linux Mint, Pop!_OS | apt |
| Fedora, Red Hat, Rocky Linux, AlmaLinux | dnf |
| Arch, Manjaro, EndeavourOS | pacman |
| Várias (pacotes que funcionam em qualquer distribuição) | snap |
Para programar em C#, você precisa de um pacote só: o .NET SDK (aula .NET: SDK, Runtime e CLR). Ele traz o compilador de C#, o Runtime que roda os programas, a biblioteca de classes e o comando dotnet.
1. O .NET já está instalado?
Antes de instalar, pergunte. Abra o terminal (no Ubuntu: Ctrl+Alt+T) e digite:
$ dotnet --version 10.0.112 « está instalado: SDK 10.0.112
Se apareceu um número começando com 10., você já tem o .NET 10 e pode pular para a seção 4. Se o número começa com 8. ou 9., você tem uma versão mais antiga, que sai de suporte em novembro de 2026 (aula Versões): instale também o 10, que os dois convivem. Se o .NET não estiver instalado, a resposta é esta:
$ dotnet --version bash: dotnet: comando não encontrado « o terminal não achou nenhum programa chamado dotnet $ echo $? 127 « 127: "comando não encontrado"
(No Ubuntu de computador, logo abaixo pode aparecer uma sugestão de qual pacote tem o comando.) Nesse caso, siga a seção da sua distribuição.
2. Ubuntu: dotnet-sdk-10.0
Desde o Ubuntu 22.04, o .NET está no repositório oficial do Ubuntu: a Canonical (a empresa do Ubuntu) compila o .NET a partir do código-fonte e o mantém atualizado, como qualquer outro programa do sistema. No Ubuntu 26.04, o pacote se chama dotnet-sdk-10.0. São dois comandos: o primeiro atualiza a lista de pacotes (o "catálogo da loja"); o segundo instala:
sudo apt update sudo apt install dotnet-sdk-10.0
- sudo
- "Faça como administrador" (superuser do). Instalar programas mexe no sistema todo, então é preciso permissão de administrador. O
sudopede a sua senha, que não aparece enquanto você digita (nem bolinhas): é normal, digite e tecle Enter. - apt
- O gerenciador de pacotes do Ubuntu e do Debian.
- update
- Baixa a lista mais nova de pacotes e versões. Não instala nada.
- install
- A ação: instalar.
- dotnet-sdk-10.0
- O nome do pacote: o SDK do .NET 10. O
-10.0no nome deixa várias versões conviverem (dotnet-sdk-8.0,dotnet-sdk-10.0…).
O que vem junto
O apt-cache depends mostra de que o pacote depende:
$ apt-cache depends dotnet-sdk-10.0 dotnet-sdk-10.0 Depende: aspnetcore-runtime-10.0 « o Runtime para sites (ASP.NET Core) Depende: aspnetcore-targeting-pack-10.0 Depende: dotnet-apphost-pack-10.0 « o "lançador" dos programas Depende: dotnet-runtime-10.0 « o Runtime: CLR, JIT, biblioteca Depende: dotnet-targeting-pack-10.0 « as "plantas" da biblioteca para o compilador Depende: dotnet-templates-10.0 « os modelos do dotnet new Depende: ca-certificates Depende: libc6 Depende: libgcc-s1 Depende: libstdc++6 Quebra: <dotnet-sdk-6.0> « não convive com o pacote antigo do .NET 6 Recomenda: dotnet-sdk-aot-10.0 « recomendado: entra junto por padrão Sugere: dotnet-sdk-dbg-10.0 « sugerido: NÃO entra sozinho
Repare que o SDK depende do dotnet-runtime-10.0: é por isso que, instalando o SDK, você ganha o Runtime de graça. As quatro últimas dependências (libc6 e companhia) são bibliotecas básicas do sistema que todo Ubuntu já tem.
A simulação
Dá para ver o que aconteceria, sem instalar nada, com a opção -s (simulate, "simular"). A simulação nem precisa de sudo. Como a Ana já tem o .NET, a resposta direta é curta:
$ apt install -s dotnet-sdk-10.0
NOTA: Esta é apenas uma simulação!
apt precisa de privilégios de root para execução real.
Lembre-se também de que a trava está desativada e,
portanto, não dependa da relevância para a situação real atual!
dotnet-sdk-10.0 já é a versão mais nova (10.0.112-0ubuntu1~26.04.1). « nada a fazer
Resumo:
Atualizando: 0, Instalando: 0, Removendo: 0, Não atualizando: 0
Para ver a simulação de um computador sem o .NET, a Ana fez uma cópia da lista de pacotes instalados (o arquivo /var/lib/dpkg/status) sem as linhas do .NET, guardou em ~/.cache/sim/status e pediu ao apt para usar essa cópia (a opção -o Dir::State::status=…). O resto é a resposta real do apt:
$ apt install -s -o Dir::State::status=$HOME/.cache/sim/status dotnet-sdk-10.0
NOTA: Esta é apenas uma simulação!
apt precisa de privilégios de root para execução real.
Lembre-se também de que a trava está desativada e,
portanto, não dependa da relevância para a situação real atual!
Instalando: « o que você pediu
dotnet-sdk-10.0
Instalando dependências: « o que vem junto, automaticamente
aspnetcore-runtime-10.0 dotnet-runtime-10.0
aspnetcore-targeting-pack-10.0 dotnet-sdk-aot-10.0
dotnet-apphost-pack-10.0 dotnet-targeting-pack-10.0
dotnet-host-10.0 dotnet-templates-10.0
dotnet-hostfxr-10.0
Pacotes sugeridos: « opcionais: NÃO serão instalados
aspnetcore-runtime-dbg-10.0 dotnet-runtime-dbg-10.0 dotnet-sdk-dbg-10.0
Resumo:
Atualizando: 0, Instalando: 10, Removendo: 0, Não atualizando: 0
Inst dotnet-host-10.0 (10.0.12-0ubuntu1~26.04.1 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
Inst dotnet-hostfxr-10.0 (10.0.12-0ubuntu1~26.04.1 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
Inst dotnet-runtime-10.0 (10.0.12-0ubuntu1~26.04.1 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
Inst aspnetcore-runtime-10.0 (10.0.12-0ubuntu1~26.04.1 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
Inst aspnetcore-targeting-pack-10.0 (10.0.12-0ubuntu1~26.04.1 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
Inst dotnet-apphost-pack-10.0 (10.0.12-0ubuntu1~26.04.1 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
Inst dotnet-targeting-pack-10.0 (10.0.12-0ubuntu1~26.04.1 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
Inst dotnet-templates-10.0 (10.0.112-0ubuntu1~26.04.1 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
Inst dotnet-sdk-10.0 (10.0.112-0ubuntu1~26.04.1 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
Inst dotnet-sdk-aot-10.0 (10.0.112-0ubuntu1~26.04.1 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
Conf dotnet-host-10.0 (10.0.12-0ubuntu1~26.04.1 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
… « mais 9 linhas Conf, uma por pacote
Você pediu um pacote, e o apt traria dez. As linhas Inst ("instalar") mostram a ordem: primeiro o dotnet-host-10.0 (o comando dotnet) e o dotnet-hostfxr-10.0 (a peça que escolhe qual versão do .NET usar), depois o Runtime e, no fim, o SDK. As linhas Conf ("configurar") vêm depois de tudo desempacotado. Esse é o trabalho do gerenciador: resolver as dependências por você. Somando o tamanho dos dez pacotes, são cerca de 163 MB para baixar e uns 620 MB de espaço em disco.
Numa instalação de verdade, com sudo e sem o -s, o Resumo mostra também o tamanho do download e o espaço necessário, e vêm a pergunta Continuar? [S/n] (tecle Enter: o S maiúsculo é a resposta padrão), as linhas Obter: do download e as linhas Desempacotando … e Configurando … de cada pacote (ilustrativo: a Ana já tinha o .NET). Em uma conexão comum, leva um ou dois minutos.
Qual versão vou receber?
O apt-cache policy mostra a versão instalada e as disponíveis:
$ apt-cache policy dotnet-sdk-10.0
dotnet-sdk-10.0:
Instalado: 10.0.112-0ubuntu1~26.04.1 « a instalada
Candidato: 10.0.112-0ubuntu1~26.04.1 « a que o apt instalaria (a mesma: está em dia)
Tabela de versão:
*** 10.0.112-0ubuntu1~26.04.1 500
500 http://archive.ubuntu.com/ubuntu resolute-updates/main amd64 Packages
500 http://security.ubuntu.com/ubuntu resolute-security/main amd64 Packages
100 /var/lib/dpkg/status
10.0.105-0ubuntu1 500 « a que veio no lançamento do Ubuntu 26.04
500 http://archive.ubuntu.com/ubuntu resolute/main amd64 Packages
Como ler 10.0.112-0ubuntu1~26.04.1: 10.0.112 é a versão do SDK, e o resto é a revisão do pacote feita pelo Ubuntu. O resolute é o apelido do Ubuntu 26.04. Repare nas duas versões: o Ubuntu 26.04 saiu com o SDK 10.0.105, e as correções mensais chegaram pelo resolute-updates e pelo resolute-security até o 10.0.112. É por isso que vale rodar o sudo apt upgrade de vez em quando.
Ubuntu 24.04 e 22.04
Nas versões mais antigas do Ubuntu, o .NET 10 também existe, às vezes num repositório extra. Segundo a documentação oficial da Microsoft (ilustrativo, não rodado na máquina da Ana):
| Ubuntu | No repositório do Ubuntu | No repositório extra (backports) | Para o .NET 10 |
|---|---|---|---|
| 26.04 LTS | 10.0 | 9.0, 8.0 | sudo apt install dotnet-sdk-10.0 |
| 24.04 LTS | 10.0, 8.0 | 9.0 | sudo apt install dotnet-sdk-10.0 |
| 22.04 LTS | 8.0 | 10.0, 9.0 | primeiro o repositório extra (abaixo), depois sudo apt install dotnet-sdk-10.0 |
O repositório extra se chama Ubuntu .NET backports e é mantido pela equipe do .NET no Ubuntu. Para acrescentá-lo (ilustrativo):
sudo add-apt-repository ppa:dotnet/backports sudo apt update sudo apt install dotnet-sdk-10.0
3. Debian, Fedora, Arch e outras formas
Nas outras distribuições, os comandos seguem a documentação oficial de cada uma. Eles não foram executados na máquina da Ana (que é Ubuntu), por isso a tabela é ilustrativa:
| Distribuição | Comando | Observação |
|---|---|---|
| Debian 13 (e 12) | Primeiro o repositório da Microsoft:wget https://packages.microsoft.com/config/debian/13/packages-microsoft-prod.deb -O packages-microsoft-prod.debsudo dpkg -i packages-microsoft-prod.debrm packages-microsoft-prod.debdepois sudo apt update e sudo apt install dotnet-sdk-10.0 | O Debian não traz o .NET no repositório próprio; quem mantém o pacote é a Microsoft. No Debian 12, troque o 13 do endereço por 12. |
| Fedora | sudo dnf install dotnet-sdk-10.0 | Está no repositório do próprio Fedora. |
| Arch (e Manjaro) | sudo pacman -S dotnet-sdk | O Arch tem sempre a versão mais nova, com o nome sem número. |
Snap (qualquer distribuição com snap) | sudo snap install dotnet-sdk-100 | 100 = .NET 10.0. O Snap não cria o comando dotnet sozinho: a documentação ensina a criar um atalho em /usr/local/bin/dotnet. |
Sem administrador: o script dotnet-install.sh
A Microsoft oferece um script que instala o .NET na sua pasta pessoal, sem sudo. Ele serve para computadores em que você não é administrador ou para ter uma versão que a sua distribuição ainda não tem (ilustrativo):
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh chmod +x dotnet-install.sh ./dotnet-install.sh --channel 10.0
O .NET vai para ~/.dotnet, e você precisa avisar o terminal onde ele está, acrescentando ao fim do arquivo ~/.bashrc as linhas export DOTNET_ROOT=$HOME/.dotnet e export PATH=$PATH:$DOTNET_ROOT. A desvantagem: o apt upgrade não atualiza essa cópia; você precisa rodar o script de novo a cada correção.
Qual escolher?
| Forma | Quando usar |
|---|---|
Pacote da distribuição (apt, dnf, pacman) | Sempre que existir. Atualiza junto com o sistema. É a forma do guia. |
| Repositório da Microsoft | No Debian, ou quando a sua distribuição não tem o .NET 10. |
| Snap | Distribuições sem pacote do .NET, mas com snap. |
dotnet-install.sh | Sem acesso de administrador, ou para testar uma versão de pré-lançamento (como o .NET 11). |
No Ubuntu, instalar o dotnet-sdk-10.0 do Ubuntu e o do repositório da Microsoft causa conflitos: os pacotes têm o mesmo nome, mas os arquivos vão para pastas diferentes (/usr/lib/dotnet e /usr/share/dotnet), e o dotnet pode deixar de achar o SDK. Escolha uma fonte só. No Ubuntu, a recomendação da Microsoft é usar a do próprio Ubuntu.
4. Conferindo a instalação
Depois de instalar, confira. O primeiro comando mostra só a versão do SDK:
$ dotnet --version 10.0.112
O segundo mostra tudo o que o .NET sabe sobre si mesmo e sobre o computador:
$ dotnet --info .NET SDK: Version: 10.0.112 « o SDK Commit: 95017c711e Workload version: 10.0.100-manifests.63b36e85 MSBuild version: 18.0.11+95017c711 Ambiente de runtime: OS Name: ubuntu OS Version: 26.04 OS Platform: Linux « o sistema RID: ubuntu.26.04-x64 Base Path: /usr/lib/dotnet/sdk/10.0.112/ Cargas de trabalho do .NET instaladas: Não há cargas de trabalho instaladas para exibir. Configurado para usar workload sets ao instalar novos manifestos. Nenhum conjunto de cargas de trabalho está instalado. Execute "dotnet workload restore" para instalar um conjunto de cargas de trabalho. Host: Version: 10.0.12 « o comando dotnet e o Runtime Architecture: x64 Commit: 95017c711e .NET SDKs installed: 10.0.112 [/usr/lib/dotnet/sdk] .NET runtimes installed: Microsoft.AspNetCore.App 10.0.12 [/usr/lib/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.NETCore.App 10.0.12 [/usr/lib/dotnet/shared/Microsoft.NETCore.App] Other architectures found: None Environment variables: Not set global.json file: Not found Learn more: https://aka.ms/dotnet/info Download .NET: https://aka.ms/dotnet/download
- .NET SDK
- A versão do SDK (
10.0.112) e do MSBuild, o "mestre de obras" do build. - Ambiente de runtime
- O sistema (
ubuntu26.04,Linux) e o RID (runtime identifier), o "nome técnico" da plataforma:ubuntu.26.04-x64= Ubuntu 26.04 em processador x64. - Cargas de trabalho
- Pacotes opcionais para celular, navegador etc. (workloads). O guia não precisa de nenhuma; pode ignorar essas linhas.
- Host
- O comando
dotnetem si (o "anfitrião"), versão10.0.12. - SDKs installed e runtimes installed
- O mesmo que
dotnet --list-sdksedotnet --list-runtimes(aula .NET: SDK, Runtime e CLR). - global.json file: Not found
- Um arquivo opcional que fixa a versão do SDK de uma pasta. Sem ele, vale o SDK mais novo instalado.
Repare que a saída mistura português e inglês: as partes do SDK estão traduzidas, e as do dotnet básico (o host), não. É assim mesmo. Para ver onde o comando está:
$ which dotnet « onde está o comando /usr/bin/dotnet $ readlink -f $(which dotnet) « para onde aponta o atalho /usr/lib/dotnet/dotnet
O /usr/bin/dotnet é um atalho (um link simbólico) para o dotnet de verdade, que mora em /usr/lib/dotnet, junto com o SDK e os Runtimes.
5. O primeiro uso: a mensagem de boas-vindas
O --version e o --info só respondem. Mas, na primeira vez que você usa um comando de verdade do SDK, como o dotnet run, ele se apresenta. Crie uma pasta para os seus programas, entre nela e crie o arquivo ola.cs com um editor de texto (o editor de textos do seu sistema, o nano ola.cs no terminal, ou um editor de programação, aula Editores e IDEs), com uma linha só:
$ mkdir cs « cria a pasta cs na sua pasta pessoal $ cd cs « entra nela
Console.WriteLine("Olá, mundo!");
Agora rode com dotnet run ola.cs. Na primeira vez, aparece isto:
$ dotnet run ola.cs Bem-vindo(a) ao .NET 10.0. --------------------- Versão do SDK: 10.0.112 ---------------- Instalou um certificado de desenvolvimento ASP.NET Core HTTPS. Para confiar no certificado, execute 'dotnet dev-certs https --trust' Saiba mais HTTPS: https://aka.ms/dotnet-https ---------------- Escreva seu primeiro aplicativo: https://aka.ms/dotnet-hello-world Descubra o que há de novo: https://aka.ms/dotnet-whats-new Explorar a documentação: https://aka.ms/dotnet-docs Relate problemas e encontre a fonte no GitHub: https://github.com/dotnet/core Use 'dotnet --help' para ver os comandos disponíveis ou visite: https://aka.ms/dotnet-cli -------------------------------------------------------------------------------------- Olá, mundo! « e, no fim, o seu programa
- Bem-vindo(a) ao .NET 10.0
- A apresentação, com a versão do SDK.
- certificado de desenvolvimento ASP.NET Core HTTPS
- O SDK criou um certificado para testar sites com
https://no seu computador. Só interessa para quem faz sites com ASP.NET Core; para o guia, pode ignorar. - Os endereços aka.ms
- Atalhos para a documentação oficial: o primeiro programa, as novidades, a referência do comando
dotnet. - Olá, mundo!
- Depois da apresentação, o programa rodou normalmente.
A mensagem aparece uma vez só. O .NET anota que já se apresentou criando uns arquivinhos na pasta escondida ~/.dotnet, e da segunda vez em diante vai direto ao programa:
$ ls -a ~/.dotnet . .. 10.0.112.aspNetCertificateSentinel « "já criei o certificado" 10.0.112.dotnetFirstUseSentinel « "já me apresentei" 10.0.112.toolpath.sentinel corefx $ dotnet run ola.cs Olá, mundo! « da segunda vez, só o programa
Sentinel quer dizer "sentinela": arquivos vazios que só servem para marcar que algo já foi feito. Se você apagar esses arquivos, a mensagem aparece de novo no próximo comando.
O .NET baixado do site da Microsoft (pelo script, pelo instalador do Windows ou pelo repositório da Microsoft) mostra, nessa mesma mensagem, um parágrafo sobre telemetria: as ferramentas mandam à Microsoft dados anônimos de uso, e você pode desligar isso pondo export DOTNET_CLI_TELEMETRY_OPTOUT=1 no seu ~/.bashrc. O .NET compilado pelo Ubuntu não mostra esse parágrafo, como você viu na saída da Ana.
6. O teste final: o C# 14
O Olá, mundo! provou que o SDK funciona. Falta conferir a versão da linguagem. Este programa usa uma novidade do C# 14, a atribuição com ?. ("se o cliente existir, mude o nome dele"). Não precisa entender o código agora: a aula Operadores ??, ?. e ??= explica.
Cliente? cliente = new Cliente();
cliente?.Nome = "Ana";
Console.WriteLine($"C# 14 funcionando! Cliente: {cliente?.Nome}");
class Cliente
{
public string Nome { get; set; } = "";
}
$ dotnet run teste14.cs C# 14 funcionando! Cliente: Ana « tudo certo
Se apareceu essa linha, o seu computador está pronto para o guia inteiro. Com um SDK mais antigo (do .NET 9, por exemplo), o mesmo arquivo dá o erro CS9260: O recurso "atribuição condicional nula" não está disponível no C# 13.0 (aula Versões). O mesmo programa roda aqui no editor, que também usa o C# 14:
Experimente: rode e compare com a saída do terminal da Ana. Depois troque "Ana" pelo seu nome e rode de novo.
Cliente? cliente = new Cliente();
cliente?.Nome = "Ana";
Console.WriteLine($"C# 14 funcionando! Cliente: {cliente?.Nome}");
class Cliente
{
public string Nome { get; set; } = "";
}
Atualizando
O gerenciador de pacotes também cuida das atualizações. De tempos em tempos, rode (ilustrativo):
sudo apt update sudo apt upgrade
O upgrade atualiza todos os programas instalados, incluindo o .NET, para a última correção (de 10.0.112 para 10.0.113, por exemplo). Ele não troca o .NET 10 pelo 11: versões novas do .NET chegam como pacotes novos, com outro número no nome (dotnet-sdk-11.0), e as duas convivem.
Quando dá errado
dotnet: comando não encontrado
$ dotnet --version bash: dotnet: comando não encontrado
O que aconteceu: o .NET não está instalado, ou foi instalado pelo script dotnet-install.sh numa pasta que o terminal não conhece.
Como consertar: instale com sudo apt install dotnet-sdk-10.0 (ou o comando da sua distribuição, na seção 3). Se usou o script, confira se as linhas export DOTNET_ROOT=… e export PATH=… estão no ~/.bashrc e abra um terminal novo.
sudo: você é root?
$ apt install dotnet-sdk-dbg-10.0 Erro: Não foi possível abrir arquivo de trava /var/lib/dpkg/lock-frontend - open (13: Permissão negada) Erro: Não é possível adquirir a trava da interface do dpkg (/var/lib/dpkg/lock-frontend), você é root? $ echo $? 100
O que aconteceu: instalar programas mexe no sistema todo, e só o administrador (o root) pode fazer isso. A "trava" (lock) é um arquivo que garante que só um programa instale pacotes por vez; um usuário comum não tem permissão nem de abri-lo.
Como consertar: repita o comando com sudo na frente. Um atalho do terminal: sudo !! repete o último comando com sudo.
No .NET SDKs were found.
O que aconteceu: alguém instalou o dotnet-runtime-10.0 em vez do dotnet-sdk-10.0. O comando dotnet existe e roda programas prontos, mas o dotnet run responde, em inglês, No .NET SDKs were found. A aula .NET: SDK, Runtime e CLR mostra a mensagem inteira.
Como consertar: sudo apt install dotnet-sdk-10.0. O Runtime que já está lá é aproveitado.
A fatal error occurred. The folder [/usr/share/dotnet/host/fxr] does not exist (ilustrativo)
O que aconteceu: o .NET foi instalado pelo repositório da Microsoft e pelo do Ubuntu, e o comando dotnet de uma fonte procura as peças na pasta da outra. É o problema do aviso da seção 3. (A tela segue a mensagem descrita na documentação da Microsoft; a máquina da Ana tem uma fonte só.)
Como consertar: remova os pacotes do .NET (sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*', como manda a documentação da Microsoft), tire o repositório que você não quer usar e instale de novo de uma fonte só.
O que aconteceu: o .NET não consegue gravar os arquivos "sentinela" em ~/.dotnet, quase sempre porque essa pasta foi criada pelo root (alguém rodou sudo dotnet … uma vez).
Como consertar: devolva a pasta para você com sudo chown -R $USER: ~/.dotnet, e nunca rode o dotnet com sudo: ele não precisa.
Referência
| Distribuição | Instalar o .NET 10 SDK |
|---|---|
| Ubuntu 26.04 e 24.04 | sudo apt update e sudo apt install dotnet-sdk-10.0 |
| Ubuntu 22.04 | sudo add-apt-repository ppa:dotnet/backports e depois o mesmo apt install |
| Debian 12 e 13 | Repositório da Microsoft (packages-microsoft-prod.deb) e sudo apt install dotnet-sdk-10.0 |
| Fedora | sudo dnf install dotnet-sdk-10.0 |
| Arch, Manjaro | sudo pacman -S dotnet-sdk |
| Qualquer uma, com Snap | sudo snap install dotnet-sdk-100 |
| Sem administrador | ./dotnet-install.sh --channel 10.0 |
| Comando | Para quê |
|---|---|
dotnet --version | Conferir se está instalado e a versão do SDK |
dotnet --info | Tudo: SDK, Runtimes, sistema, RID |
which dotnet | Onde está o comando |
apt-cache policy dotnet-sdk-10.0 | Versão instalada e disponível (Ubuntu/Debian) |
apt-cache depends dotnet-sdk-10.0 | O que o pacote traz junto |
apt install -s pacote | Simular uma instalação, sem instalar |
sudo apt update e sudo apt upgrade | Atualizar o catálogo e os programas |
Exercícios
1. Instalar no Ubuntu
Complete o comando que instala o .NET 10 SDK no Ubuntu:
2. Tudo sobre o .NET
Complete o comando que mostra o SDK, os Runtimes e o sistema de uma vez:
3. Instalar no Fedora
Complete o comando do Fedora:
4. Você pediu para instalar só o dotnet-sdk-10.0, e o apt mostrou dez pacotes. Por quê?
5. A mensagem Bem-vindo(a) ao .NET 10.0. apareceu no primeiro dotnet run. O que vai acontecer no segundo?
6. O apt install respondeu você é root?. O que faltou?
7. No Ubuntu, qual é a fonte recomendada para o .NET 10?
Missão final: o cartão da instalação
Para comemorar, um programa que mostra o que a Ana instalou. Faça a missão aqui no editor e, depois, repita no seu terminal com dotnet run.
Missão: o cartão da Ana está incompleto. Acrescente uma linha Console.WriteLine para o C# 14, logo depois da do Runtime, para a saída terminar com as três peças, uma por linha: SDK 10.0.112, Runtime 10.0.12 e C# 14.
Console.WriteLine("Instalado no notebook da Ana:");
Console.WriteLine("SDK 10.0.112");
Console.WriteLine("Runtime 10.0.12");
Console.WriteLine("Instalado no notebook da Ana:");
Console.WriteLine("SDK 10.0.112");
Console.WriteLine("Runtime 10.0.12");
Console.WriteLine("C# 14");
Resumo
- O Linux instala programas pelo gerenciador de pacotes:
apt(Ubuntu/Debian),dnf(Fedora),pacman(Arch),snap. - Antes de instalar, pergunte:
dotnet --version. Para o guia, o SDK tem de começar com10.. - No Ubuntu 26.04 e 24.04:
sudo apt updateesudo apt install dotnet-sdk-10.0. Oapttraz dez pacotes, com o Runtime junto (cerca de 163 MB de download). - Debian usa o repositório da Microsoft; Fedora,
dnf install dotnet-sdk-10.0; Arch,pacman -S dotnet-sdk; sem administrador, odotnet-install.sh. Não misture duas fontes. - Confira com
dotnet --versionedotnet --info. No primeiro comando de verdade, aparece a mensagemBem-vindo(a) ao .NET 10.0., uma vez só. - O teste final: um programa com um recurso do C# 14 tem de rodar.
- Próximo passo: escolher onde escrever o código, em Editores e IDEs.