2018年11月9日金曜日

C#(.NET Framework)で作ったコンソールアプリを .NET Core を使ってLinuxで動かしてみる!【後編】


こんにちは。よっしーです。

今回は、Visual Studio 2017 の C#(.NET Framework)で作ったコンソールアプリを
.NET Core を使ってLinux上で動かす。という前回からの続きです。

まず、Linux(Ubuntu)へ .NET Core をインストールします。
(現在最新バージョンの .NET Core 2.1 を入れます)

公式サイト(https://dotnet.github.io/)にディストリビューションごとの
インストール手順が記載されていますので参考にして下さい。

私の手元には Ubuntu14.04 があったので、今回はそこへインストールしました。

Microsoftのキーとフィードを登録

$ wget -q https://packages.microsoft.com/config/ubuntu/14.04/packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb

.NET Core をインストール
※ 公式サイトの手順は、sdkをインストールしていますが、
今回は実行環境のみインストールしたいので、runtimeをインストールしています。

$ sudo apt-get install apt-transport-https
$ sudo apt-get update
$ sudo apt-get install dotnet-runtime-2.1

これで実行環境が用意できました。

あとは、前回 Visual Studio で作成した、
実行ファイル一式を、Linux上へ配置します。

$ tree
.
|-- dotnet_sample.deps.json
|-- dotnet_sample.dll
|-- dotnet_sample.pdb
`-- dotnet_sample.runtimeconfig.json

これで準備完了です。さっそく実行してみましょう。
dotnet コマンドにDLLファイルをパラメータとして渡して実行します。

$ dotnet dotnet_sample.dll コマンドライン引数A コマンドライン引数B
コマンドライン引数A, コマンドライン引数B
/home/yossy/dotnet_sample

コマンドライン引数とカレントディレクトリのパスを表示し、
text.txt を出力しています。内容を覗いてみると。。。

$ cat test.txt
コマンドライン引数A
コマンドライン引数B

コマンドライン引数として渡した文字列が正しく格納されています。

Windowsで確認した動作と同じ結果となりましたね。
Linux上で.NET Framework を用いたプログラムが動作していることがわかります。




今回、簡単なサンプルプログラムを作ってみましたが、注意する点として、
WindowsとLinuxではパスの扱いが異なる。ということが挙げられます。

例えばディレクトリ階層を "¥¥" で連結しているようなプログラムは、
Windows側だと正しく動きますが、Linux側ではパス異常となります。

× Windows側でしか正しいパスにならない。
string path = Directory.GetCurrentDirectory() + "\\" + "test.txt";

 パス結合するライブラリを用いることでWindows/Linux共通で動作する
string path = Path.Combine(Directory.GetCurrentDirectory(),"test.txt")



OSに依存するような所はライブラリが吸収してくれるはずですので、
上手くそれらを使うようなプログラミングを心がけましょう。

ではまた~。

0 件のコメント:

コメントを投稿