C#

【C#】.NET 6 のコンソールアプリをLinux上で動作させる

.NET Core以降からマルチプラットフォーム化したとのことで、WindowsだけでなくLinuxやMacでも動くようになりました。実際に試したことがなかったため、本当に動くのか試してみました。

今回はコンソールアプリを動かしてみたいと思います。

【検証環境】.NET 6 / WSL Ubuntu 22.04 LTS

WSLをインストール

検証に使うLinux環境はWSL(Windows Subsystem for Linux)を利用します。

WSLの概要やインストールなどはこちらのサイトを参考にしました。

MicroSoft Store からUbuntuをインストールできるようです。

Linuxにアプリをデプロイ

Ubuntuで動かすコンソールアプリを用意します。

Console.WriteLine("Hello, Ubuntu!");

作成したコンソールアプリのプロジェクトを一旦フォルダに発行します。

発行の際に設定から、配置モードを自己完結フレームワーク依存の二つから選択することになります。

https://rksoftware.hatenablog.com/entry/2019/02/17/194701

自己完結

自己完結にすると、.NET Runtimeをインストールしていなくても動作させることが可能となります。ただし、発行フォルダのサイズが大きくなります。

ファイルの発行

すべての設定を表示から、プロファイル設定を開きます

配置モードを自己完結、ターゲットランタイムをlinux-x64に設定して保存します。

発行したフォルダをみてみると、容量は約70MBでした。画像の下にも続いていて、大量のdllなどのファイルが含まれていることが確認できます。

実はこれらの大量のファイルをひとまとめにしたバイナリファイルを生成する方法もあります。下記の画像のように、ファイルの公開オプション > 単一ファイルの作成 にチェックを入れます。

https://devadjust.exblog.jp/27784413/

ひとつのファイルにまとめられたことが確認できました。こちらの方が少し容量が小さくなってますね。

アプリの実行

上記で発行したファイルをUbuntuにコピーします(「/mnt/d/」でWindowsのDドライブを表現します)

※パスは環境に合わせて変更してください

$ cp /mnt/d/Test/ConsoleApp1/bin/Release/net6.0/publish/linux-x64/ConsoleApp1 /tmp/

コピーしたバイナリファイルを下記のようにして実行することができます

$ /tmp/ConsoleApp1
Hello, Ubuntu!

フレームワーク依存

フレームワーク依存では.NET Runtimeのインストールが必要になります。その分発行されるファイルの容量は小さくなります。

ファイルの発行

実際に発行してみると、自己完結と比べて非常に小さいことが確認できます。

アプリの実行

今回は単一ファイルではなく、dllも含めてUbuntuにコピーして実行してみたいと思います。

-r を付けないと怒られてしまいました。

$ cp -r /mnt/d/Test/ConsoleApp1/bin/Release/net6.0/publish/linux-x64 /tmp/

.NETをインストールしていない状態で下記コマンドを実行すると、エラーになりま、、、せんでした。

理由はよくわかりません(^^; WSLだからなのかもしれませんね。また調査してみます。

$ /tmp/linux-x64/ConsoleApp1
Hello, Ubuntu!

一応.NETのインストール手順も記載しておきます

https://docs.microsoft.com/ja-jp/dotnet/core/install/linux-ubuntu#2204

署名のインストールと、SDKのインストールを行います

# 署名のインストール
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

# SDKのインストール
sudo apt-get update; \
  sudo apt-get install -y apt-transport-https && \
  sudo apt-get update && \
  sudo apt-get install -y dotnet-sdk-6.0

dotnet コマンドでアプリを実行します(dotnet コマンドの場合はdllを指定)

$ dotnet /tmp/linux-x64/ConsoleApp1.dll
Hello, Ubuntu!
エンジニアの転職ならこれ!

【第二新卒向け】マイナビジョブ20's

マイナビジョブ20'sは、20代・第二新卒・既卒向けの転職エージェントです。

▼こんな方におすすめ
・はじめて転職しようと思っている
・転職できるだけのスキルが自分にあるか不安
・手厚いサポートを受けたい

【フリーランス向け】 Midworks

Midworksは豊富な案件と「フリーランス」と「正社員」の良いとこ取りをした働き方を実現する手厚い保障が特徴です。

▼こんな方におすすめ
・現在正社員でフリーランスになろうか悩んでいる
・フリーランスとして働いているが、先行きが不安がある  (安定的な案件確保や保障など)
・自分の市場価値を知りたい、見合った案件で参画したい
・今後のキャリアビジョンを踏まえて案件を選びたい