{"id":625,"date":"2026-09-06T11:11:47","date_gmt":"2026-09-06T14:11:47","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/2026\/09\/instalando-dotnet-10-no-linux\/"},"modified":"2026-09-08T11:12:43","modified_gmt":"2026-09-08T14:12:43","slug":"instalando-dotnet-10-no-linux","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/en\/2026\/09\/instalando-dotnet-10-no-linux\/","title":{"rendered":"Installing .NET 10 on Linux"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote do LinuxPro instalando o .NET 10 em distribuicoes Linux\" src=\"\/wp-content\/uploads\/2026\/09\/instalando-dotnet-10-v2.webp\" width=\"1486\" height=\"856\" \/><\/p>\n<p>Anyone still saying \u201c.NET Core 10\u201d has the history right \u2014 the Core name ended at 3.1. Since 5, the platform has been called simply <strong>.NET<\/strong>. 10 came out on November 11, 2025, is LTS until November 14, 2028, and in September 2026, the stable SDK is <strong>10.0.400<\/strong> (runtime 10.0.11, C# 14). Below: Ubuntu, Debian, Fedora\/RHEL, the official script, and a tarball \u2014 just one path, without mixing feeds.<\/p>\n<p><!-- more --><\/p>\n<h2>SDK or just the runtime<\/h2>\n<p>For development, install the <strong>SDK<\/strong> (<code data-no-translation=\"\">dotnet-sdk-10.0<\/code>). It already includes the runtime and ASP.NET Core. To only run a published app without a bundled runtime, the most useful package is <code data-no-translation=\"\">aspnetcore-runtime-10.0<\/code>. Check what is already on the machine:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">dotnet --info\ndotnet --list-sdks\ndotnet --list-runtimes\n<\/code><\/pre>\n<h2>Ubuntu (the distribution\u2019s route)<\/h2>\n<p>Microsoft <strong>no longer publishes<\/strong> .NET packages in its feed for Ubuntu 22.04 onward. Use Canonical\u2019s APT \u2014 and a single feed. On 24.04 LTS, 25.04, 25.10, and 26.04, 10 is already in the native repository:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">sudo apt-get update\nsudo apt-get install -y dotnet-sdk-10.0\ndotnet --version\n<\/code><\/pre>\n<p>On <strong>Ubuntu 22.04<\/strong> the native APT stops at 8. 10 comes from Canonical\u2019s backports PPA:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">sudo add-apt-repository ppa:dotnet\/backports\nsudo apt-get update\nsudo apt-get install -y dotnet-sdk-10.0\n<\/code><\/pre>\n<p>Do not add <code data-no-translation=\"\">packages.microsoft.com<\/code> \u201cjust in case.\u201d Mixing Microsoft\u2019s feed with the distribution\u2019s is the classic cause of <code data-no-translation=\"\">libhostfxr.so<\/code> \/ SDK not found. Choose one.<\/p>\n<h2>Debian 12 and 13<\/h2>\n<p>Here, Microsoft\u2019s feed still applies. Debian 13:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">wget https:\/\/packages.microsoft.com\/config\/debian\/13\/packages-microsoft-prod.deb -O packages-microsoft-prod.deb\nsudo dpkg -i packages-microsoft-prod.deb\nrm packages-microsoft-prod.deb\nsudo apt-get update\nsudo apt-get install -y dotnet-sdk-10.0\n<\/code><\/pre>\n<p>On Debian 12, change the path to <code data-no-translation=\"\">config\/debian\/12\/packages-microsoft-prod.deb<\/code>. The 10 feed publishes x64 and Arm64; Arm32 requires the script or tarball.<\/p>\n<h2>Fedora, RHEL, and CentOS Stream<\/h2>\n<p>Native package, no extra repository. Fedora 43\/44, RHEL 8\/9\/10 (AppStream, registered subscription), and CentOS Stream 9\/10:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">sudo dnf install dotnet-sdk-10.0\n<\/code><\/pre>\n<p>On the server, if the app does not include the runtime when published: <code data-no-translation=\"\">sudo dnf install aspnetcore-runtime-10.0<\/code>.<\/p>\n<h2>Official script or tarball (any distribution)<\/h2>\n<p>No root, no messing with APT. The script installs the current LTS \u2014 today, 10 \u2014 in <code data-no-translation=\"\">~\/.dotnet<\/code>:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">curl -L https:\/\/dot.net\/v1\/dotnet-install.sh -o dotnet-install.sh\nchmod +x dotnet-install.sh\n.\/dotnet-install.sh --channel 10.0\necho 'export DOTNET_ROOT=$HOME\/.dotnet' &gt;&gt; ~\/.profile\necho 'export PATH=$PATH:$HOME\/.dotnet:$HOME\/.dotnet\/tools' &gt;&gt; ~\/.profile\nsource ~\/.profile\ndotnet --version\n<\/code><\/pre>\n<p>The SDK 10.0.400 tarball (same contents, you choose the folder):<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">case $(uname -m) in\n  x86_64)  ARCH=x64 ;;\n  aarch64) ARCH=arm64 ;;\n  *) echo \"arch n\u00e3o suportada\"; exit 1 ;;\nesac\nVER=10.0.400\ncd \/tmp\ncurl -fLO \"https:\/\/builds.dotnet.microsoft.com\/dotnet\/Sdk\/${VER}\/dotnet-sdk-${VER}-linux-${ARCH}.tar.gz\"\nmkdir -p \"$HOME\/.dotnet\"\ntar -C \"$HOME\/.dotnet\" -xzf \"\/tmp\/dotnet-sdk-${VER}-linux-${ARCH}.tar.gz\"\n<\/code><\/pre>\n<p>The same PATH as with the script. Each file\u2019s SHA-256 checksum is on the <a href=\"https:\/\/dotnet.microsoft.com\/download\/dotnet\/10.0\">10.0 download page<\/a>.<\/p>\n<h2>Snap (if the distribution only has snap)<\/h2>\n<p>Canonical packages <code data-no-translation=\"\">dotnet-sdk-100<\/code>. It works, but Microsoft itself warns: <code data-no-translation=\"\">dotnet tool<\/code> and <code data-no-translation=\"\">dotnet watch<\/code> often break with snap. Prefer APT, dnf, or the script for development.<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">sudo snap install dotnet-sdk-100\nsudo ln -s \/snap\/dotnet-sdk-100\/current\/usr\/bin\/dotnet \/usr\/local\/bin\/dotnet\nexport DOTNET_ROOT=\/snap\/dotnet-sdk-100\/current\/usr\/lib\/dotnet\n<\/code><\/pre>\n<p>Do not mix snap and APT in the same <code data-no-translation=\"\">PATH<\/code>.<\/p>\n<h2>Hello, net10.0<\/h2>\n<p>With the SDK in <code data-no-translation=\"\">PATH<\/code>:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">dotnet new console -n OlaLinux -o ola --framework net10.0\ncd ola\ndotnet run\n<\/code><\/pre>\n<p>The template already generates a <code data-no-translation=\"\">.csproj<\/code> with <code data-no-translation=\"\">TargetFramework<\/code> <code data-no-translation=\"\">net10.0<\/code>. Web: <code data-no-translation=\"\">dotnet new webapi -n ApiLinux<\/code>. Starting with 10, <code data-no-translation=\"\">dotnet new sln<\/code> creates the SLNX format \u2014 it is the new default, not an error.<\/p>\n<h2>Wrap-up<\/h2>\n<p>One package (<code data-no-translation=\"\">dotnet-sdk-10.0<\/code>) or one script in <code data-no-translation=\"\">~\/.dotnet<\/code>. Just one feed. One <code data-no-translation=\"\">dotnet new<\/code>. Core in the name is nostalgia; the platform on Linux, in 2026, is .NET 10 LTS.<\/p>\n<p>Language map: <a href=\"\/en\/2017\/05\/linguagens-de-programacao\/\">The 7 main programming languages<\/a>. Toolchain siblings: <a href=\"\/en\/2019\/12\/install-golang-linux\/\">Go<\/a>, <a href=\"\/en\/2017\/05\/instalando-swift-no-linux\/\">Swift<\/a>, <a href=\"\/en\/2017\/04\/python-do-basico-ao-profissional\/\">Python<\/a>.<\/p>\n<p>Docs: <a href=\"https:\/\/learn.microsoft.com\/dotnet\/core\/install\/linux\">learn.microsoft.com\/dotnet\/core\/install\/linux<\/a> \u00b7 download: <a href=\"https:\/\/dotnet.microsoft.com\/download\/dotnet\/10.0\">dotnet.microsoft.com\/download\/dotnet\/10.0<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Anyone still saying \u201c.NET Core 10\u201d is not wrong about its history \u2014 the Core name ended at 3.1. Since version 5, the platform has simply been called .NET. Version 10 came out on November 11, 2025, is LTS until November 14, 2028, and in September 2026 the stable SDK is 10.0.400 \u2026 <a title=\"Installing .NET 10 on Linux\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/en\/2026\/09\/instalando-dotnet-10-no-linux\/\" aria-label=\"Read more about Instalando .NET 10 no Linux\">Read more<\/a><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[45,2,3],"tags":[286,15,285,4,287,5],"class_list":["post-625","post","type-post","status-publish","format-standard","hentry","category-desenv","category-linux","category-ubuntu","tag-csharp","tag-debian","tag-dotnet","tag-linux","tag-sdk","tag-ubuntu"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/625","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/comments?post=625"}],"version-history":[{"count":3,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/625\/revisions"}],"predecessor-version":[{"id":1406,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/625\/revisions\/1406"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/media?parent=625"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/categories?post=625"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/tags?post=625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}