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

.NET8 SDKインストール

2023年12月31日

メニューへ戻る

Ubuntu 22.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 22.04.3にインストールする例ですが、Desktopでも同じです。
2024年1月1日時点での最新バージョンは、8.0.100です。

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

Ubuntuがネイティブに .NETをサポートする故に、パッケージ(ライブラリの依存関係も考慮してくれる)でのインストールの仕方に 2通りあります。

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

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

Canonical によって提供される .NET SDK のバージョンは、常に .1xx の機能帯にあります。 新しい機能帯のリリースを使用する場合は、Microsoft フィードを使用して SDK をインストールしてください。 リポジトリ フィード間の切り替えの影響を理解するには、Linux 上の .NET パッケージの混在に関する記事で情報を確認してください。

ちょっとこれは気をつけないといけません。
.NETで何をするか、導入する目的は何かによって、選択しないといけませんので。

ただ、これと並行して考慮しなければいけないのは、Canonicalの snapに対する動向です。

このニュースソースは信用できるのか知らんけど…
Enough of it! Ubuntu to Ditch Snap Completely With 24.04 LTS Naughty Nightingale

本当なのかどうか分かりませんが、2024年4月にリリース予定の Ubuntu 24.04 では、Canonicalはどうも snapを外してくるらしい事が書いてあります。

完全snap版 Desktopは引き続き出すみたいですが、普通のは snapを外してくるんでしょうか。

4月に蓋を開てみるまで分かりませんが、ここは大事を取って Microsoftの aptリポジトリからインストールするようにします。

と言いつつ、実は Ubuntu 22.04の場合、snapでインストールできるのは .NET7までなんですね。
選択の余地なしと。


0.事前確認

試しに Ubuntuの aptリポジトリで .NET SDKを探してみましょう。

subro@UbuntuServer2204-1:~$ apt search dotnet-sdk
ソート中... 完了
全文検索... 完了
dotnet-sdk-6.0/jammy-updates,jammy-security 6.0.125-0ubuntu1~22.04.1 amd64
  dotNET 6.0 Software Development Kit

dotnet-sdk-6.0-source-built-artifacts/jammy-updates,jammy-security 6.0.125-0ubuntu1~22.04.1 amd64
  Internal package for building dotNet 6.0 Software Development Kit

dotnet-sdk-7.0/jammy-updates,jammy-security 7.0.114-0ubuntu1~22.04.1 amd64
  dotNET 7.0 Software Development Kit

dotnet-sdk-7.0-source-built-artifacts/jammy-updates,jammy-security 7.0.114-0ubuntu1~22.04.1 amd64
  Internal package for building dotNet 7.0 Software Development Kit

.NET 8は無いことがわかります。


1.Microsoftのリポジトリを OSに登録

apt install コマンドを実行すると参照するリポジトリに Microsoftのそれを追加します。

以下に手順がありますので、それをやっていきます。
Microsoft パッケージ リポジトリを登録する

Ubuntuのバージョンを変数に取り込みます。

subro@UbuntuServer2204-1:~$ declare repo_version=$(if command -v lsb_release &> /dev/null; then lsb_release -r -s; else grep -oP '(?<=^VERSION_ID=).+' /etc/os-release | tr -d '"'; fi)

Microsoftのリポジトリを証明するためのキーを取得します。

subro@UbuntuServer2204-1:~$ wget https://packages.microsoft.com/config/ubuntu/$repo_version/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
--2023-12-31 22:23:16--  https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb
packages.microsoft.com (packages.microsoft.com) をDNSに問いあわせています... 23.99.120.248
packages.microsoft.com (packages.microsoft.com)|23.99.120.248|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 3692 (3.6K) [application/octet-stream]
‘packages-microsoft-prod.deb’ に保存中

packages-microsoft-prod.deb                      100%[==========================================================================================================>]   3.61K  --.-KB/s    in 0s

2023-12-31 22:23:16 (626 MB/s) - ‘packages-microsoft-prod.deb’ へ保存完了 [3692/3692]

[packages-microsoft-prod.deb]ファイルとしてダウンロードしました。

ダウンロードしたファイルは deb形式のパッケージファイルなので、インストールの要領で OSに登録します。

subro@UbuntuServer2204-1:~$ sudo dpkg -i packages-microsoft-prod.deb
以前に未選択のパッケージ packages-microsoft-prod を選択しています。
(データベースを読み込んでいます ... 現在 110386 個のファイルとディレクトリがインストールされています。)
packages-microsoft-prod.deb を展開する準備をしています ...
packages-microsoft-prod (1.0-ubuntu22.04.1) を展開しています...
packages-microsoft-prod (1.0-ubuntu22.04.1) を設定しています ...

インストール(リポジトリの追加登録)ができました。

ダウンロードしたファイルは不要になったので削除します。

subro@UbuntuServer2204-1:~$ rm packages-microsoft-prod.deb

新規の aptリポジトリが登録されましたので、どんなソフトのどんなバージョンを得られるのか、パッケージのリストをアップデートします。

subro@UbuntuServer2204-1:~$ sudo apt update
ヒット:1 https://download.docker.com/linux/ubuntu jammy InRelease
取得:2 https://packages.microsoft.com/ubuntu/22.04/prod jammy InRelease [3,631 B]
ヒット:3 http://jp.archive.ubuntu.com/ubuntu jammy InRelease
取得:4 https://packages.microsoft.com/ubuntu/22.04/prod jammy/main all Packages [1,036 B]
取得:5 https://packages.microsoft.com/ubuntu/22.04/prod jammy/main armhf Packages [10.4 kB]
取得:6 https://packages.microsoft.com/ubuntu/22.04/prod jammy/main arm64 Packages [28.8 kB]
取得:7 https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages [118 kB]
取得:8 http://jp.archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
ヒット:9 http://jp.archive.ubuntu.com/ubuntu jammy-backports InRelease
取得:10 http://jp.archive.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
391 kB を 3秒 で取得しました (151 kB/s)
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
アップグレードできるパッケージが 2 個あります。表示するには 'apt list --upgradable' を実行してください。

Dockerのリポジトリとか、ここでは関係ないものも入っていますが、Microsoftのが追加されていることが分かりますね。


2.インストール

Ubuntu 22.04の手順はこちら。
.NET のインストール

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

subro@UbuntuServer2204-1:~$ sudo apt-get update && \
  sudo apt-get install -y dotnet-sdk-8.0
ヒット:1 https://download.docker.com/linux/ubuntu jammy InRelease
ヒット:2 https://packages.microsoft.com/ubuntu/22.04/prod jammy InRelease
ヒット:3 http://jp.archive.ubuntu.com/ubuntu jammy InRelease
ヒット:4 http://jp.archive.ubuntu.com/ubuntu jammy-updates InRelease
ヒット:5 http://jp.archive.ubuntu.com/ubuntu jammy-backports InRelease
ヒット:6 http://jp.archive.ubuntu.com/ubuntu jammy-security InRelease
パッケージリストを読み込んでいます... 完了
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  aspnetcore-runtime-8.0 aspnetcore-targeting-pack-8.0 dotnet-apphost-pack-8.0 dotnet-targeting-pack-8.0 netstandard-targeting-pack-2.1
以下のパッケージが新たにインストールされます:
  aspnetcore-runtime-8.0 aspnetcore-targeting-pack-8.0 dotnet-apphost-pack-8.0 dotnet-sdk-8.0 dotnet-targeting-pack-8.0 netstandard-targeting-pack-2.1
アップグレード: 0 個、新規インストール: 6 個、削除: 0 個、保留: 2 個。
119 MB 中 112 MB のアーカイブを取得する必要があります。
この操作後に追加で 507 MB のディスク容量が消費されます。
取得:1 https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 dotnet-targeting-pack-8.0 amd64 8.0.0-1 [2,801 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu jammy-updates/universe amd64 netstandard-targeting-pack-2.1 amd64 6.0.125-0ubuntu1~22.04.1 [1,398 kB]
取得:3 https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 aspnetcore-targeting-pack-8.0 amd64 8.0.0-1 [1,906 kB]
取得:4 https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 dotnet-apphost-pack-8.0 amd64 8.0.0-1 [3,508 kB]
取得:5 https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 dotnet-sdk-8.0 amd64 8.0.100-1 [102 MB]
112 MB を 16秒 で取得しました (6,821 kB/s)
以前に未選択のパッケージ aspnetcore-runtime-8.0 を選択しています。
(データベースを読み込んでいます ... 現在 110602 個のファイルとディレクトリがインストールされています。)
.../0-aspnetcore-runtime-8.0_8.0.0-1_amd64.deb を展開する準備をしています ...
aspnetcore-runtime-8.0 (8.0.0-1) を展開しています...
以前に未選択のパッケージ dotnet-targeting-pack-8.0 を選択しています。
.../1-dotnet-targeting-pack-8.0_8.0.0-1_amd64.deb を展開する準備をしています ...
dotnet-targeting-pack-8.0 (8.0.0-1) を展開しています...
以前に未選択のパッケージ aspnetcore-targeting-pack-8.0 を選択しています。
.../2-aspnetcore-targeting-pack-8.0_8.0.0-1_amd64.deb を展開する準備をしています ...
aspnetcore-targeting-pack-8.0 (8.0.0-1) を展開しています...
以前に未選択のパッケージ dotnet-apphost-pack-8.0 を選択しています。
.../3-dotnet-apphost-pack-8.0_8.0.0-1_amd64.deb を展開する準備をしています ...
dotnet-apphost-pack-8.0 (8.0.0-1) を展開しています...
以前に未選択のパッケージ netstandard-targeting-pack-2.1 を選択しています。
.../4-netstandard-targeting-pack-2.1_6.0.125-0ubuntu1~22.04.1_amd64.deb を展開する準備をしています ...
netstandard-targeting-pack-2.1 (6.0.125-0ubuntu1~22.04.1) を展開しています...
以前に未選択のパッケージ dotnet-sdk-8.0 を選択しています。
.../5-dotnet-sdk-8.0_8.0.100-1_amd64.deb を展開する準備をしています ...
dotnet-sdk-8.0 (8.0.100-1) を展開しています...
dotnet-targeting-pack-8.0 (8.0.0-1) を設定しています ...
netstandard-targeting-pack-2.1 (6.0.125-0ubuntu1~22.04.1) を設定しています ...
aspnetcore-targeting-pack-8.0 (8.0.0-1) を設定しています ...
dotnet-apphost-pack-8.0 (8.0.0-1) を設定しています ...
aspnetcore-runtime-8.0 (8.0.0-1) を設定しています ...
dotnet-sdk-8.0 (8.0.100-1) を設定しています ...
Scanning processes...
Scanning linux images...

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.

インストールできました。

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

subro@UbuntuServer2204-1:~$ dotnet --info
.NET SDK:
 Version:           8.0.100
 Commit:            57efcf1350
 Workload version:  8.0.100-manifests.6c33ef20

ランタイム環境:
 OS Name:     ubuntu
 OS Version:  22.04
 OS Platform: Linux
 RID:         linux-x64
 Base Path:   /usr/share/dotnet/sdk/8.0.100/

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

Host:
  Version:      8.0.0
  Architecture: x64
  Commit:       5535e31a71

.NET SDKs installed:
  8.0.100 [/usr/share/dotnet/sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 8.0.0 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 8.0.0 [/usr/share/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.100、SDKが 8.0.100、ランタイムが 8.0.0ですかね。


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

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

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

subro@UbuntuServer2204-1:~$ dotnet new list

をやってみたところ、

ワークロードの検証中に問題が発生しました。詳細については、"dotnet workload update" を実行してください。

とか言いますので、やっておきます。
sudoを使って管理者権限でやらないとダメなようです。

subro@UbuntuServer2204-1:~$ sudo dotnet workload update

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

テレメトリ
---------
.NET ツールは、エクスペリエンスの向上のために利用状況データを収集します。データは Microsoft によって収集され、コミュニティと共有されます。テレメトリをオプトアウトするには、好みのシェルを使用して、DOTNET_CLI_TELEMETRY_OPTOUT 環境変数を '1' または 'true' に設定できます。

.NET CLI ツールのテレメトリの詳細をご覧ください: https://aka.ms/dotnet-cli-telemetry

----------------
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 にアクセスしてください
--------------------------------------------------------------------------------------

この機能バンドにはワークロードがインストールされていません。以前の SDK バージョンでインストールしたワークロードを更新するには、--from-previous-sdk オプションを含めます。
NuGet パッケージ署名の認証をスキップしています。
広告マニフェスト microsoft.net.sdk.maccatalyst を更新しました。
広告マニフェスト microsoft.net.sdk.tvos を更新しました。
広告マニフェスト microsoft.net.sdk.ios を更新しました。
広告マニフェスト microsoft.net.sdk.maui を更新しました。
広告マニフェスト microsoft.net.sdk.android を更新しました。
広告マニフェスト microsoft.net.workload.mono.toolchain.current を更新しました。
広告マニフェスト microsoft.net.workload.emscripten.current を更新しました。
広告マニフェスト microsoft.net.sdk.macos を更新しました。
広告マニフェスト microsoft.net.workload.emscripten.net6 を更新しました。
広告マニフェスト microsoft.net.workload.mono.toolchain.net6 を更新しました。
広告マニフェスト microsoft.net.workload.mono.toolchain.net7 を更新しました。
広告マニフェスト microsoft.net.workload.emscripten.net7 を更新しました。
広告マニフェスト microsoft.net.sdk.aspire を更新しました。
ワークロード マニフェスト microsoft.net.sdk.android のバージョン 34.0.52 をインストールしています...
ワークロード マニフェスト microsoft.net.sdk.ios のバージョン 17.0.8490 をインストールしています...
ワークロード マニフェスト microsoft.net.sdk.maccatalyst のバージョン 17.0.8490 をインストールしています...
ワークロード マニフェスト microsoft.net.sdk.macos のバージョン 14.0.8490 をインストールしています...
ワークロード マニフェスト microsoft.net.sdk.maui のバージョン 8.0.3 をインストールしています...
ワークロード マニフェスト microsoft.net.sdk.tvos のバージョン 17.0.8490 をインストールしています...
ワークロード マニフェスト microsoft.net.sdk.aspire のバージョン 8.0.0-preview.2.23619.3 をインストールしています...
この機能バンドにはワークロードがインストールされていません。以前の SDK バージョンでインストールしたワークロードを更新するには、--from-previous-sdk オプションを含めます。
SDK 機能バンド 8.0.100 のガベージ コレクトを行っています...

ワークロード  が正常に更新されました。

では、改めて。

subro@UbuntuServer2204-1:~$ dotnet new list
これらのテンプレートは、入力:  と一致しました

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

作成後の操作を処理しています...
/home/subro/c#/blazortest/blazortest.csproj を復元しています:
  復元対象のプロジェクトを決定しています...
  /home/subro/c#/blazortest/blazortest.csproj を復元しました (326 ms)。
正常に復元されました。

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

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

ssubro@UbuntuServer2204-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

7 directories, 25 files

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

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

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

subro@UbuntuServer2204-1:~/c#/blazortest$ dotnet run
ビルドしています...
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
      No XML encryptor configured. Key {3bfbde25-bce2-47e7-8700-f0a9b49403a7} may be persisted to storage in unencrypted form.
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5231
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/c#/blazortest

動き出しました。

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

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

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

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

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

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

subro@UbuntuServer2204-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:25957",
        "sslPort": 44393
      }
    },
    "profiles": {
      "http": {
        "commandName": "Project",
        "dotnetRunMessages": true,
        "launchBrowser": true,
        "applicationUrl": "http://0.0.0.0:5231",
        "environmentVariables": {
          "ASPNETCORE_ENVIRONMENT": "Development"
        }
      },
      "https": {
        "commandName": "Project",
        "dotnetRunMessages": true,
        "launchBrowser": true,
        "applicationUrl": "https://0.0.0.0:7117;http://0.0.0.0:5231",
        "environmentVariables": {
          "ASPNETCORE_ENVIRONMENT": "Development"
        }
      },
      "IIS Express": {
        "commandName": "IISExpress",
        "launchBrowser": true,
        "environmentVariables": {
          "ASPNETCORE_ENVIRONMENT": "Development"
        }
      }
    }
  }

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

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

subro@UbuntuServer2204-1:~/c#/blazortest$ dotnet run
ビルドしています...
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://0.0.0.0:5231
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/c#/blazortest

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

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

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

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

いつもの画面が出ましたよ!
Blazrorのサンプル画面

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

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

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