お金をかけずにサーバーの勉強をしよう

.NET8 SDKインストール

2025年4月20日

メニューへ戻る

Ubuntu 24.04に Microsoftの C#の開発が出来る .NET8をインストールします。

2023年11月に .NET待望の LTSの新バージョンである 8 がリリースされまして、今後しばらくはこのバージョンがスタンダードになっていくはずです。

.NET7から 8になって、WEB開発フレームワークの Blazor Serverと Blazor WebAssemblyが統合されたのが大きいと聞きます。

でも、何が良いって、LTSなのが良いですね。

.NETになってからも、.NET7まではまだ暫定って感じでしたから、これでやっと本気で取り組むバージョンになったって思っています。

2022年8月に Microsoftと Canonical(Ubuntuを作ってるところ)が提携して、Ubuntuはネィティブに .NETをサポートするという発表をしました。

しかし、その後しばらく snapパッケージで提供される .NET SDKが上手く動かないので、いつの間にか Microsoftの aptリポジトリを使うようになったりで、モヤモヤ感がありましたね。


以降 Ubuntu Server 24.04にインストールする例ですが Desktopでも同じです。

2025年4月20日時点では Ver.9も出ていますがこれは LTSではありませんのでスルーし、LTSの最新バージョンは 8.0.115です。

Ubuntu 24.04へのインストールについては Microsoftの公式に手順があります。
Ubuntu に .NET SDK または .NET ランタイムをインストールする

上記リンクでは .NET9がデフォルト表示になっているので、以下のところで [.NET 8]タブを選択しましょう。
インストール方法で [.NET8]タブを選ぶ

Ubuntuではこれまで以下の方法でのインストールが提供されてきました。

  1. Ubuntuのリポジトリから snapパッケージでインストール
  2. Microsoftのリポジトリから aptパッケージでインストール

どっちにすりゃい〜の?については、上記のページからの引用です。

.NET は Ubuntu パッケージ マネージャー フィードで提供されています。 Microsoft パッケージ リポジトリに Ubuntu 用の .NET パッケージは含まれなくなりました。

今はもう 2の方法は提供されなくなっていました。

「では snapパッケージになるのか? バージョン管理に難が…」と思っていたら、どうやらUbuntuの aptリポジトリからの提供になっているようです。


1.インストール

手順はこちら。
SDK のインストール

ではインストールします。

subro@UbuntuServer2404-1:~$ sudo apt-get update && \
  sudo apt-get install -y dotnet-sdk-8.0
〜〜〜 省略 〜〜〜

何の問題も無くインストールできました。

バージョンを確認してみましょう。

subro@UbuntuServer2404-1:~$ dotnet --info
.NET SDK:
 Version:           8.0.115
 Commit:            9c0387c3ea
 Workload version:  8.0.100-manifests.b0a64abb

ランタイム環境:
 OS Name:     ubuntu
 OS Version:  24.04
 OS Platform: Linux
 RID:         ubuntu.24.04-x64
 Base Path:   /usr/lib/dotnet/sdk/8.0.115/

インストール済みの .NET ワークロード:
 Workload version: 8.0.100-manifests.b0a64abb
表示するインストール済みワークロードはありません。

Host:
  Version:      8.0.15
  Architecture: x64
  Commit:       50c4cb9fc3

.NET SDKs installed:
  8.0.115 [/usr/lib/dotnet/sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 8.0.15 [/usr/lib/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 8.0.15 [/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

SDK全体のセットが 8.0.15、SDKが 8.0.115、ランタイムが 8.0.15ってことですかね。


2.試しに Webサーバーアプリを作る

これで C#の開発ができるようになりましたので、試しに Blazorを使った WEBアプリケーションを作ってみます。

以下のコマンドで、開発プロジェクトのテンプレートにどんなものがあるか一覧できます。

subro@UbuntuServer2404-1:~$ dotnet workload update

.NET 8.0 へようこそ!
---------------------
SDK バージョン: 8.0.115

----------------
ASP.NET Core HTTPS 開発証明書をインストールしました。
証明書を信頼するには、次の手順を参照してください: https://aka.ms/dotnet-https-linux

----------------
最初のアプリを作成するには、https://aka.ms/dotnet-hello-world を参照してください
最新情報については、https://aka.ms/dotnet-whats-new を参照してください
ドキュメントを探すには、https://aka.ms/dotnet-docs を参照してください
GitHub で問題の報告とソースの検索を行うには、https://github.com/dotnet/core を参照してください
'dotnet --help' を使用して使用可能なコマンドを確認するか、https://aka.ms/dotnet-cli にアクセスしてください
--------------------------------------------------------------------------------------
これらのテンプレートは、入力:  と一致しました

テンプレート名                                   短い名前                    言語        タグ
-----------------------------------------------  --------------------------  ----------  --------------------------
API コントローラー                               apicontroller               [C#]        Web/ASP.NET
ASP.NET Core (空)                                web                         [C#],F#     Web/Empty
ASP.NET Core gRPC サービス                       grpc                        [C#]        Web/gRPC/API/Service
ASP.NET Core Web API                             webapi                      [C#],F#     Web/Web API/API/Service
ASP.NET Core Web API (native AOT)                webapiaot                   [C#]        Web/Web API/API/Service
ASP.NET Core Web アプリ                          webapp,razor                [C#]        Web/MVC/Razor Pages
ASP.NET Core Web アプリ (Model-View-Controller)  mvc                         [C#],F#     Web/MVC
Blazor Web アプリ                                blazor                      [C#]        Web/Blazor/WebAssembly
Blazor WebAssembly アプリ                        blazorwasm                  [C#]        Web/Blazor/WebAssembly/PWA
dotnet gitignore ファイル                        gitignore,.gitignore                    Config
dotnet ローカル ツール マニフェスト ファイル     tool-manifest                           Config
EditorConfig ファイル                            editorconfig,.editorconfig              Config
global.json ファイル                             globaljson,global.json                  Config
MSBuild Directory.Build.props ファイル           buildprops                              MSBuild/props
MSBuild Directory.Build.targets ファイル         buildtargets                            MSBuild/props
MSTest Playwright Test Project                   mstest-playwright           [C#]        Test/MSTest/Playwright
MSTest Test Project                              mstest                      [C#],F#,VB  Test/MSTest
MVC ViewImports                                  viewimports                 [C#]        Web/ASP.NET
MVC ViewStart                                    viewstart                   [C#]        Web/ASP.NET
MVC コントローラー                               mvccontroller               [C#]        Web/ASP.NET
NuGet Config                                     nugetconfig,nuget.config                Config
NUnit 3 Test Item                                nunit-test                  [C#],F#,VB  Test/NUnit
NUnit 3 Test Project                             nunit                       [C#],F#,VB  Test/NUnit
NUnit Playwright Test Project                    nunit-playwright            [C#]        Test/NUnit/Playwright
Razor クラス ライブラリ                          razorclasslib               [C#]        Web/Razor/Library
Razor コンポーネント                             razorcomponent              [C#]        Web/ASP.NET
Razor ビュー                                     view                        [C#]        Web/ASP.NET
Razor ページ                                     page                        [C#]        Web/ASP.NET
Web 構成                                         webconfig                               Config
xUnit Test Project                               xunit                       [C#],F#,VB  Test/xUnit
クラス ライブラリ                                classlib                    [C#],F#,VB  Common/Library
コンソール アプリ                                console                     [C#],F#,VB  Common/Console
ソリューション ファイル                          sln,solution                            Solution
プロトコル バッファー ファイル                   proto                                   Web/gRPC
ワーカー サービス                                worker                      [C#],F#     Common/Worker/Web

お目当てのテンプレートは「Blazor Web アプリ」の気がします。

ワーキングディレクトリ [~/c#/] に移ってから、[blazortest]プロジェクトを作ります。

subro@UbuntuServer2404-1:~/c#$ dotnet new blazor -o blazortest
テンプレート "Blazor Web アプリ" が正常に作成されました。
このテンプレートには、Microsoft 以外のパーティのテクノロジーが含まれています。詳しくは、https://aka.ms/aspnetcore/8.0-third-party-notices をご覧ください。

作成後の操作を処理しています...
/home/subro/work/c#/blazortest/blazortest.csproj を復元しています:
  Determining projects to restore...
  Restored /home/subro/work/c#/blazortest/blazortest.csproj (in 1.72 sec).
正常に復元されました。

[blazortest]プロジェクトができました。

作られたプロジェクトのディレクトリの中身はこんな感じです。

ssubro@UbuntuServer2404-1:~/c#$ tree blazortest
locales-launch: Data of ja_JP locale not found, generating, please wait...
blazortest/
├── Components
│   ├── App.razor
│   ├── Layout
│   │   ├── MainLayout.razor
│   │   ├── MainLayout.razor.css
│   │   ├── NavMenu.razor
│   │   └── NavMenu.razor.css
│   ├── Pages
│   │   ├── Counter.razor
│   │   ├── Error.razor
│   │   ├── Home.razor
│   │   └── Weather.razor
│   ├── Routes.razor
│   └── _Imports.razor
├── Program.cs
├── Properties
│   └── launchSettings.json
├── appsettings.Development.json
├── appsettings.json
├── blazortest.csproj
├── obj
│   ├── blazortest.csproj.nuget.dgspec.json
│   ├── blazortest.csproj.nuget.g.props
│   ├── blazortest.csproj.nuget.g.targets
│   ├── project.assets.json
│   └── project.nuget.cache
└── wwwroot
    ├── app.css
    ├── bootstrap
    │   ├── bootstrap.min.css
    │   └── bootstrap.min.css.map
    └── favicon.png

8 directories, 25 files

Webアプリの開発をしたことがある人は何となく分かる階層とネーミングですよね。

このままサンプルが動くので実行してみます。

subro@UbuntuServer2404-1:~/c#$ cd blazortest

subro@UbuntuServer2404-1:~/c#/blazortest$ dotnet run
ビルドしています...
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
      No XML encryptor configured. Key {700395ab-b05f-4411-9c22-6652192ff1ec} may be persisted to storage in unencrypted form.
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5047
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /home/subro/work/c#/blazortest

動き出しました。

[5047/tcp]で待ち受けているようですが localhostだけかも。
他のターミナルでもう一つ sshログインして、ssコマンドで確認してみます。

subro@UbuntuServer2404-1:~$ ss -ltp | grep -E 'State|5047'
State  Recv-Q Send-Q Local Address:Port   Peer Address:PortProcess
LISTEN 0      512        127.0.0.1:5047        0.0.0.0:*    users:(("blazortest",pid=4750,fd=260))
LISTEN 0      512            [::1]:5047           [::]:*    users:(("blazortest",pid=4750,fd=261))

やはり localhostだけに公開されています。

これではクライアントの Webブラウザからアクセスできませんので [0.0.0.0(IP_ALL)]で公開するようにします。

先のプログラムはCtrl+cで終わらせます。

プロジェクトの中にある Properties/launchSettings.json ってファイルの [applicationUrl] の値がそれっぽい。

Linux環境では使わなそうな IIS関連のセッティングもありそうだけど [localhost] と書いてあるところを一律 [0.0.0.0] と変えてしまいました。

subro@UbuntuServer2404-1:~/c#/blazortest$ cat Properties/launchSettings.json
{
  "$schema": "http://json.schemastore.org/launchsettings.json",
    "iisSettings": {
      "windowsAuthentication": false,
      "anonymousAuthentication": true,
      "iisExpress": {
        "applicationUrl": "http://0.0.0.0:28637",
        "sslPort": 44349
      }
    },
    "profiles": {
      "http": {
        "commandName": "Project",
        "dotnetRunMessages": true,
        "launchBrowser": true,
        "applicationUrl": "http://0.0.0.0:5047",
        "environmentVariables": {
          "ASPNETCORE_ENVIRONMENT": "Development"
        }
      },
      "https": {
        "commandName": "Project",
        "dotnetRunMessages": true,
        "launchBrowser": true,
        "applicationUrl": "https://0.0.0.0:7153;http://0.0.0.0:5047",
        "environmentVariables": {
          "ASPNETCORE_ENVIRONMENT": "Development"
        }
      },
      "IIS Express": {
        "commandName": "IISExpress",
        "launchBrowser": true,
        "environmentVariables": {
          "ASPNETCORE_ENVIRONMENT": "Development"
        }
      }
    }
  }

ピンクの箇所は元々 [localhost] って書いてありましたので、[0.0.0.0] に変えました。

改めてプロジェクトを実行してみます。

subro@UbuntuServer2404-1:~/c#/blazortest$ dotnet run
ビルドしています...
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://0.0.0.0:5047
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /home/subro/work/c#/blazortest

動き出しました。
2回目のビルドは速かったです。

ssコマンドの結果はこの通り。

subro@UbuntuServer2404-1:~$ ss -ltp | grep -E 'State|5047'
State  Recv-Q Send-Q Local Address:Port   Peer Address:PortProcess
LISTEN 0      512          0.0.0.0:5047        0.0.0.0:*    users:(("blazortest",pid=4976,fd=257))

良さげですので Webブラウザでアクセスしてみます。
私の環境では [http://UbuntuServer2404-1:5047] となります。

いつもの画面が出ましたよ!\(^o^)/
Blazrorのサンプル画面

.NET8の Blazorでは以前のバージョンの「最初のロード時に WebAssemblyのプログラムコードをダウンロードするから時間かかる」っていうウィークポイントをある程度克服していると誰かのブログに書いてありました。

WebAssemblyと統合された 新Blazorで Single Page Application(SPA)を C#で開発する環境が進化しました。
いよいよ React一強も危ういか?

C#プログラマに幸あれです。