Ubuntuに.NET Coreをインストール

目次

.NET Frameworkはマイクロソフト製のアプリケーション開発・実行環境で、Windowsで動作します。 .NET Coreはクロスプラットフォーム対応でオープンソースの.NET実装で、Linuxで動作させることが出来ます。

これによってUbuntuでもC#での開発が出来るようになるのでインストールしてみました。

OSは"Ubuntu 20.04.3 LTS"です。

.NETをインストールする

Ubuntuへのインストール方法は公式ページにあるのでこれに従います。

https://docs.microsoft.com/en-us/dotnet/core/install/linux-ubuntu

公式ページによると2022年3月5日現在、Ubuntu 20.04では".NET Core 3.1"、".NET 5"、".NET 6"に対応しています。

1.Microsoft パッケージ署名キーを追加する

# 指定したURLのパッケージファイルをダウンロードする
$ 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
# 不要になったパッケージファイルを削除する
$ rm packages-microsoft-prod.deb

2.パッケージリストを更新する

# パッケージリストを最新に更新する
$ sudo apt-get update
# 必要なパッケージをインストールする (aptコマンドをhttpsに対応)
$ sudo apt-get install -y apt-transport-https

インストール可能な.NET SDKを確認してみます。

$ apt search dotnet-sdk
ソート中... 完了
全文検索... 完了
dotnet-sdk-2.1/focal 2.1.818-1 amd64
  Microsoft .NET Core SDK 2.1.818

dotnet-sdk-3.1/focal 3.1.416-1 amd64
  Microsoft .NET Core SDK 3.1.416

dotnet-sdk-5.0/focal 5.0.405-1 amd64
  Microsoft .NET SDK 5.0.405

dotnet-sdk-6.0/focal 6.0.200-1 amd64
  Microsoft .NET SDK 6.0.200

3.SDKをインストールする

.NETアプリを開発するために.NET SDKをインストールします。実行に必要なランタイムも含まれています。

# .NET 6をインストールする
$ sudo apt-get install -y dotnet-sdk-6.0

インストールされたバージョンを確認してみます。

$ dotnet --version
6.0.200

.NETアプリを作成する

C#言語でコンソールアプリを作成します。

手順は公式ドキュメントにあります。

https://docs.microsoft.com/en-us/dotnet/core/tutorials/with-visual-studio-code?pivots=dotnet-6-0

公式ドキュメントにあるようにVisual Studio Codeで作業を行います。

VS Codeでプロジェクトを作成

VS Codeでプロジェクトを作成

# コンソールアプリの.NET6.0プロジェクトを作成します
$ dotnet new console --framework net6.0

下記の様にプロジェクトファイルが作成されました。

$ tree HelloWorld
HelloWorld
├── HelloWorld.csproj
├── Program.cs
├── bin
│   └── Debug
│       └── net6.0
└── obj
    ├── Debug
    │   └── net6.0
    │       ├── HelloWorld.AssemblyInfo.cs
    │       ├── HelloWorld.AssemblyInfoInputs.cache
    │       ├── HelloWorld.GeneratedMSBuildEditorConfig.editorconfig
    │       ├── HelloWorld.GlobalUsings.g.cs
    │       ├── HelloWorld.assets.cache
    │       ├── HelloWorld.csproj.AssemblyReference.cache
    │       ├── ref
    │       └── refint
    ├── HelloWorld.csproj.nuget.dgspec.json
    ├── HelloWorld.csproj.nuget.g.props
    ├── HelloWorld.csproj.nuget.g.targets
    ├── project.assets.json
    └── project.nuget.cache

8 directories, 13 files

ドキュメントに従ってProgram.csのコードを変更し、実行してみます。

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}
アプリを実行

アプリを実行

.NETアプリをビルドする

実行ファイルを作成するにはdotnet buildコマンドを使用します。

# 実行ファイルを作成する
~/HelloWorld$ dotnet build
.NET 向け Microsoft (R) Build Engine バージョン 17.1.0+ae57d105c
Copyright (C) Microsoft Corporation.All rights reserved.

  復元対象のプロジェクトを決定しています...
  復元対象のすべてのプロジェクトは最新です。
  HelloWorld -> /home/izumi/HelloWorld/bin/Debug/net6.0/HelloWorld.dll

ビルドに成功しました。
    0 個の警告
    0 エラー

経過時間 00:00:02.75
# 実行ファイルが作成されたディレクトリに移動する
~/HelloWorld$ cd bin/Debug/net6.0
# ディレクトリの内容を確認する
~/HelloWorld/bin/Debug/net6.0$ ls -al
合計 176
drwxrwxr-x 2 izumi izumi   4096  3月  5 17:18 .
drwxrwxr-x 3 izumi izumi   4096  3月  5 17:06 ..
-rwxr-xr-x 1 izumi izumi 142632  3月  5 17:33 HelloWorld
-rw-rw-r-- 1 izumi izumi    400  3月  5 17:18 HelloWorld.deps.json
-rw-rw-r-- 1 izumi izumi   5120  3月  5 17:33 HelloWorld.dll
-rw-rw-r-- 1 izumi izumi  10276  3月  5 17:33 HelloWorld.pdb
-rw-rw-r-- 1 izumi izumi    139  3月  5 17:18 HelloWorld.runtimeconfig.json
# 実行する
~/HelloWorld/bin/Debug/net6.0$ ./HelloWorld
Hello World!

ヘルプ

dotnetコマンドのヘルプです。

$ dotnet --help
.NET SDK (6.0.200)
使用法: dotnet [runtime-options] [path-to-application] [arguments]

.NET アプリケーションを実行します。

runtime-options:
  --additionalprobingpath <path>   調査ポリシーと調査対象アセンブリを含むパス。
  --additional-deps <path>         追加の deps.json ファイルへのパス。
  --depsfile                       <application>.deps.json ファイルへのパス。
  --fx-version <version>           アプリケーションを実行するために使用するインストール済み Shared Framework のバージョン。
  --roll-forward <setting>         フレームワーク バージョン (LatestPatch、Minor、LatestMinor、Major、LatestMajor、Disable) にロールフォワードします。
  --runtimeconfig                  <application>.runtimeconfig.json ファイルへのパス。

path-to-application:
  実行するアプリケーション .dll ファイルへのパス。

使用法: dotnet [sdk-options] [command] [command-options] [arguments]

.NET SDK コマンドを実行します。

sdk-options:
  -d|--diagnostics  診断出力を有効にします。
  -h|--help         コマンド ラインのヘルプを表示します。
  --info            .NET 情報を表示します。
  --list-runtimes   インストール済みランタイムを表示します。
  --list-sdks       インストール済み SDK を表示します。
  --version         使用中の .NET SDK バージョンを表示します。

SDK コマンド:
  add               .NET プロジェクトにパッケージまたは参照を追加します。
  build             .NET プロジェクトをビルドします。
  build-server      ビルドによって開始されたサーバーとやり取りします。
  clean             .NET プロジェクトのビルド出力をクリーンします。
  format            プロジェクトやソリューションにスタイルのユーザー設定を適用します。
  help              コマンド ラインのヘルプを表示します。
  list              .NET プロジェクトのプロジェクト参照を一覧表示します。
  msbuild           Microsoft Build Engine (MSBuild) コマンドを実行します。
  new               新しい .NET プロジェクトまたはファイルを作成します。
  nuget             追加の NuGet コマンドを提供します。
  pack              NuGet パッケージを作成します。
  publish           .NET プロジェクトを配置のために公開します。
  remove            .NET プロジェクトからパッケージまたは参照を削除します。
  restore           .NET プロジェクトに指定されている依存関係を復元します。
  run               .NET プロジェクトの出力をビルドして実行します。
  sdk               .NET SDK のインストールを管理します。
  sln               Visual Studio ソリューション ファイルを変更します。
  store             指定されたアセンブリをランタイム パッケージ ストアに格納します。
  test              .NET プロジェクトに指定されているテスト ランナーを使用して、単体テストを実行します。
  tool              .NET のエクスペリエンスを向上するツールをインストールまたは管理します。
  vstest            Microsoft Test Engine (VSTest) コマンドを実行します。
  workload          オプションのワークロードを管理します。

バンドルされたツールからの追加コマンド:
  dev-certs         開発証明書を作成し、管理します。
  fsi               F# Interactive を開始するか、F# スクリプトを実行します。
  sql-cache         SQL Server キャッシュ コマンドライン ツール。
  user-secrets      開発ユーザーのシークレットを管理します。
  watch             ファイルが変更されたときにコマンドを実行するファイル ウォッチャーを起動します。

コマンドに関する詳細情報については、'dotnet [command] --help' を実行します。