Linuxで .Net ( dotnetコマンド )

Linux環境下で C# などを使ってプログラムを書きたい場合 一昔前は Mono 一択でしたが、去年 Microsoftが .Net Core として Linuxで使用できる オープンソースな .Netの環境を公開 してくれました。

Monoの環境が作ってあるので特に使っていなかったのですが、 気が向いたので本家版も導入してみようとして、 ちょっと詰まるところがあったのでメモしておきます。

基本的なインストール手順

基本的にインストール手順は .Net Coreの Get Startedに記載されています。 ( ただ、ここ記載の方法ではうまく行きませんのでご注意ください )

一応書き出して置くと

◎Fedoraの場合 23 24 向けのファイルしか公開されていないので Fedora25でも Fedora24のものを使うしかありません。

$ sudo dnf install libunwind libicu
$ curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=848833
$ sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet
$ sudo ln -s /opt/dotnet/dotnet /usr/local/bin
$ rm dotnet.tar.gz

◎Ubuntuの場合

Ubuntuも 16.10 までしか公式では対応していません。 以下は 16.10 のデータを使う方法です。

$ sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ yakkety main" > /etc/apt/sources.list.d/dotnetdev.list'
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 417A0893
$ sudo apt-get update

Failed to initialize CoreCLR, HRESULT: 0x80131500

上記公式の方法でインストールを行った場合 プロジェクトを作ろうとすると

Failed to initialize CoreCLR, HRESULT: 0x80131500

と表示されてうまく動作しません。 どうやら libicu のバージョンが古いものでないと行けなかったり するようです。

Ubuntuでの対応方法

Ubuntuでは古い libicuが libicu52 というパッケージで導入可能なようです。 このあたりからパッケージを入手して

sudo dpkg -i libicu52_*.deb

などを実行すればOKです。

Fedoraでの対応方法

Fedoraの場合、一発で古い libicu 52.x を導入する方法は見つかりませんでした。 調べてみたところ Fedora23, 24時代の libicu 52.x のパッケージを開腹して 中のライブラリをまるごとコピーした後

$ dotnet='LD_LIBRARY_PATH=~/(展開したライブラリへのパス)/:$LD_LIBRARY_PATH dotnet'

みたいなことをする方法が紹介されていました、 ( ここここ ちょっときたない方法なので微妙ですね。

もう1つ Fedora Copr を使う方法があります。 CoprはFeodraやCentOSで使えるサードパーティリポジトリで 最新パッケージを多数収録しているのが特徴です。 同時にオンラインのビルドシステムとしての機能もあり、 自作の srpmをアップロードして 自作rpmを配布することも できます。

そのようなリポジトリなので信頼性に関して言うと問題も あるのかもしれませんが、このCoprで配布されている  この パッケージを使うと 簡単に導入可能です。

$ sudo dnf copr enable nmilosev/dotnet-sig
$ sudo dnf install dotnetcore

以上です。

Hello World

導入が無事終わったので HW を書いてみます。

$ mkdir -p ~/work/dotnet/test
$ cd ~/work/dotnet/test
$ dotnet new
$ dotnet restore
$ dotnet run

無事実行できました。