初めての.NET Core C# Windowsで作ってLinuxで動かす

環境

VisualStudio 2017

C#

Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-43-generic x86_64)

cat /etc/debian_version

buster/sid → これUbuntuが動いているVMです。WebArenaを借りています。

プロジェクト作成

まずはWindows上でプログラムを作成します。今回はコンソールアプリで試してみます。

.NET Coreのコンソールアプリを作成してみます。

コード

作成すると、Consoleに Hello Worldが表示されるアプリが作成されています。

Console.ReadKey();

だけ付け加えてあげます。でないとデバッグ起動したときにコンソールが起動したらすぐにとじてしまいます。

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Console.ReadKey();
        }
    }
}

デバックすると、コンソールが立ち上がり、Hello World!が表示されます。

また、コマンドプロンプトから同様の事が可能です。

ConsoleApp1.csproj

Program.cs

があるディレクトリに移動し

dotnet restore

dotnet run

で実行されます。

C:\Users\User\source\repos\test\ConsoleApp1\ConsoleApp1>dotnet restore
  C:\Users\User\source\repos\test\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj の復元が 31.78 ms で完了しました。

C:\Users\User\source\repos\test\ConsoleApp1\ConsoleApp1>dotnet run
Hello World!

Debian に .Net Coreをインストールする

Debian に .NET SDK または .NET ランタイムをインストールする

Debian10の場合

実際の環境はUbuntu 18.04.1 LTS (GNU/Linux 4.15.0-43-generic x86_64)です。最初stretchが入っているつもりで設定していったのですが、実はDebian10のbusterが入っていました。だけど、以下の手順で動いたのは間違いありません。

信頼されたキーの一覧に Microsoft パッケージ署名キーを追加し、パッケージ リポジトリを追加

wget -O - https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget https://packages.microsoft.com/config/debian/9/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list

.NET SDK をインストール

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

Debian上で実行する

ConsoleApp1.csproj

Program.cs

をLinux環境にコピーして実行してみました。

この状態では、frameworkの違いにより実行できないようです。

/home/ubuntu/dotnettest# dotnet restore
  Determining projects to restore...
  Restored /home/ubuntu/dotnettest/ConsoleApp1.csproj (in 260 ms).
root@webarena01:/home/ubuntu/dotnettest# dotnet run
It was not possible to find any compatible framework version
The framework 'Microsoft.NETCore.App', version '2.1.0' was not found.
  - The following frameworks were found:
      5.0.6 at [/usr/share/dotnet/shared/Microsoft.NETCore.App]

You can resolve the problem by installing the specified framework and/or SDK.

The specified framework can be found at:
  - https://aka.ms/dotnet-core-applaunch?framework=Microsoft.NETCore.App&framework_version=2.1.0&arch=x64&rid=ubuntu.18.04-x64

apt-cache search .net

で探してみると、いっぱい出てくる状態になりました。その中で、今回怒られているのは

version ‘2.1.0’ was not found

なので、

dotnet-sdk-2.1 – Microsoft .NET Core SDK 2.1.816

をインストールしてみる事にしました。

すると、無事に Hello World! の文字列が表示されました。

home/ubuntu/dotnettest# dotnet restore
  Determining projects to restore...
  Restored /home/ubuntu/dotnettest/ConsoleApp1.csproj (in 395 ms).
/home/ubuntu/dotnettest# dotnet run
Hello World!

まとめ

.Net Coreはオープンソースで開発されているとの事。しかも、.Net 5からは、FrameWorkという言葉が抜けて、.Net Coreと統合されるそうです。

一つアプリケーションを作れば、他のOSのデバイスでも動いてくれる。.NETを実装したフリーでオープンなクロスプラットフォームと表現するそうです。

あまり開発に携わっていない私でも、何とか動かせそうで、ちょっとワクワクしますね。