いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Gitpod で .NET 5 の環境を用意して遊んでみる (.NET 5.0, C# 9.0)

概要

先日、.NET 5 がリリースされましたので、Gitpodで使えるように調整してみました。

忘れないうちにメモメモ。

補足:2021-03-16 現在、最新の gitpod/workspace-dotnet では、.NET 5 がインストールされています。なので、以下の手順はもう必要ありません。

.NET 5.0 リリースに関しては、以下のメモもよかったら参照ください。

devlights.hatenablog.com

.gitpod.Dockerfile の調整

現状(2020-11-27現在)で、Gitpod 側が用意してくれている dotnet 向けの docker image は以下。

github.com

.NET Core 3.1 をインストールするようになっているので、このイメージをベースにして .NET 5.0 を入れるようにします。

以下のような感じで .gitpod.Dockerfile を用意

FROM gitpod/workspace-dotnet

RUN wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb \
    && sudo dpkg -i packages-microsoft-prod.deb

RUN sudo apt-get update \
    && sudo apt-get install -y apt-transport-https \
    && sudo apt-get update \
    && sudo apt-get install -y dotnet-sdk-5.0 \
    && sudo rm -rf /var/lib/apt/lists/*

# installed the dotnet packages from apt command, so clear the DOTNET_ROOT environment variable. 
ENV DOTNET_ROOT=

Gitpod の ワークスペース で利用するOSは現在 Ubuntu 20.04 になっているので、

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu Focal Fossa (development branch)"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

インストール方法は以下を見て調整しました。

docs.microsoft.com

注意点として、gitpod/workspace-dotnet 内で、dotnet のインストール先をデフォルトから変更しているので内部で DOTNET_ROOT 環境変数を設定しています。今回は、apt でパッケージインストールしているので、この環境変数をクリアします。そうしないと、dotnet run とかした時に内部で見に行くツールチェインの向きがDOTNET_ROOT の方を見てしまうので .NET 5.0 コンパチのプログラム書くとエラーになります。

以下の部分で環境変数をクリアしています。

# installed the dotnet packages from apt command, so clear the DOTNET_ROOT environment variable. 
ENV DOTNET_ROOT=

.gitpod.yml の調整

後は、.gitpod.yml にて上記の dockerfile を利用するよう調整して終わりです。

image: 
  file: .gitpod.Dockerfile

tasks:
  - init: dotnet restore
    command: dotnet clean && dotnet build

vscode:
  extensions:
    - ms-vscode.csharp@1.21.12:kw8SkO8+aVTSFug281WfQQ==

これでオケ。

ちゃんと入っているか確認。

$ dotnet --list-sdks
5.0.100 [/usr/share/dotnet/sdk]

$ dotnet --info
.NET SDK (reflecting any global.json):
 Version:   5.0.100
 Commit:    5044b93829

Runtime Environment:
 OS Name:     ubuntu
 OS Version:  20.04
 OS Platform: Linux
 RID:         ubuntu.20.04-x64
 Base Path:   /usr/share/dotnet/sdk/5.0.100/

Host (useful for support):
  Version: 5.0.0
  Commit:  cf258a14b7

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

.NET runtimes installed:
  Microsoft.AspNetCore.App 5.0.0 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 5.0.0 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET runtimes or SDKs:
  https://aka.ms/dotnet-download

以下にサンプルリポジトリつくってあるので、よければご参照ください。

github.com

C# 9.0 の構文を使うとエディタで赤い波線が表示される

環境は上記で出来るのですが、Gitpod 上で利用する VSCode の C# 拡張機能 のバージョンが古い AND mono に付属している msbuild のバージョンが古いみたいで、コンパイル自体は出来るけど赤い破線は現状消えない状態です。

この件については、以下のように記載がありました。

marketplace.visualstudio.com

Note about using .NET 5 SDKs

The .NET 5 SDK requires version 16.8 of MSBuild.

For Windows users who have Visual Studio installed, this means you will need to be on the latest Visual Studio 16.8 Preview. For MacOS and Linux users who have Mono installed, this means you will need to set omnisharp.useGlobalMono to never until a version of Mono ships with MSBuild 16.8.

gitpod 上で msbuild のバージョンを見てみると

$ msbuild -version
msbuild -version
Microsoft (R) Build Engine version 16.6.0 for Mono
Copyright (C) Microsoft Corporation. All rights reserved.

16.6.0.32601

なので、ちょっとバージョンが足りていない状態ですね。まあ試すだけなので個人的には問題なしです。

参考情報

docs.microsoft.com

docs.microsoft.com

github.com

stackoverflow.com

marketplace.visualstudio.com

docs.microsoft.com

docs.microsoft.com


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com