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.

Você vai aprender
  • 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.0 no 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 --version e dotnet --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çãoGerenciador de pacotes
Ubuntu, Debian, Linux Mint, Pop!_OSapt
Fedora, Red Hat, Rocky Linux, AlmaLinuxdnf
Arch, Manjaro, EndeavourOSpacman
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 sudo pede 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.0 no 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):

UbuntuNo repositório do UbuntuNo repositório extra (backports)Para o .NET 10
26.04 LTS10.09.0, 8.0sudo apt install dotnet-sdk-10.0
24.04 LTS10.0, 8.09.0sudo apt install dotnet-sdk-10.0
22.04 LTS8.010.0, 9.0primeiro 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çãoComandoObservaçã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.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
depois 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.
Fedorasudo dnf install dotnet-sdk-10.0Está no repositório do próprio Fedora.
Arch (e Manjaro)sudo pacman -S dotnet-sdkO 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-100100 = .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?

FormaQuando usar
Pacote da distribuição (apt, dnf, pacman)Sempre que existir. Atualiza junto com o sistema. É a forma do guia.
Repositório da MicrosoftNo Debian, ou quando a sua distribuição não tem o .NET 10.
SnapDistribuições sem pacote do .NET, mas com snap.
dotnet-install.shSem acesso de administrador, ou para testar uma versão de pré-lançamento (como o .NET 11).
Não misture duas fontes para a mesma versão

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 (ubuntu 26.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 dotnet em si (o "anfitrião"), versão 10.0.12.
SDKs installed e runtimes installed
O mesmo que dotnet --list-sdks e dotnet --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.

E a telemetria?

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.

Esqueceu o 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.

Instalou só o Runtime: 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.

Duas fontes misturadas: 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ó.

A mensagem de boas-vindas aparece toda vez

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çãoInstalar o .NET 10 SDK
Ubuntu 26.04 e 24.04sudo apt update e sudo apt install dotnet-sdk-10.0
Ubuntu 22.04sudo add-apt-repository ppa:dotnet/backports e depois o mesmo apt install
Debian 12 e 13Repositório da Microsoft (packages-microsoft-prod.deb) e sudo apt install dotnet-sdk-10.0
Fedorasudo dnf install dotnet-sdk-10.0
Arch, Manjarosudo pacman -S dotnet-sdk
Qualquer uma, com Snapsudo snap install dotnet-sdk-100
Sem administrador./dotnet-install.sh --channel 10.0
ComandoPara quê
dotnet --versionConferir se está instalado e a versão do SDK
dotnet --infoTudo: SDK, Runtimes, sistema, RID
which dotnetOnde está o comando
apt-cache policy dotnet-sdk-10.0Versão instalada e disponível (Ubuntu/Debian)
apt-cache depends dotnet-sdk-10.0O que o pacote traz junto
apt install -s pacoteSimular uma instalação, sem instalar
sudo apt update e sudo apt upgradeAtualizar o catálogo e os programas

Exercícios

1. Instalar no Ubuntu

Complete o comando que instala o .NET 10 SDK no Ubuntu:

sudo apt install

2. Tudo sobre o .NET

Complete o comando que mostra o SDK, os Runtimes e o sistema de uma vez:

dotnet

3. Instalar no Fedora

Complete o comando do Fedora:

sudo install dotnet-sdk-10.0

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 com 10..
  • No Ubuntu 26.04 e 24.04: sudo apt update e sudo apt install dotnet-sdk-10.0. O apt traz 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, o dotnet-install.sh. Não misture duas fontes.
  • Confira com dotnet --version e dotnet --info. No primeiro comando de verdade, aparece a mensagem Bem-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.