C#

Windowsで開発したアプリをLinuxで実行する【C# / .Net Core】

ubuntu

WindowsのVisual Studioを使用して.Net Coreで開発したアプリをLinux環境で実行する方法を紹介します。

通常のビルドと違ってLinux用に実行ファイルを発行する必要があります。

環境

開発環境

  • Windows 10
  • Visual Studio Community 2019
  • C#
  • .Net Core 3.1

実行環境

  • WSL
  • Ubuntu 20.04

プログラム

こちらのプログラムをLinux上で実行したいと思います。

using System;

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

発行

2種類の発行方法があります。

種類

.NET Coreの配置にはフレームワーク依存の展開と自己完結型の展開があります。

ランタイム依存

ご自分のアプリケーション自体とその依存関係のみを含むアプリケーションが生成されます。 そのアプリケーションのユーザーは、.NET Core ランタイムを個別にインストールする必要があります。

引用: Microsoft.com – .NET Core アプリケーションの発行の概要

メリット

  • 実行ファイルの容量を削減できる

デメリット

  • ランタイムの事前インストールが必要
  • .Net Coreのバージョンが固定できない。更新される可能性がある。

 

自己完結型

.NET Core ランタイムとライブラリ、さらにご自分のアプリケーションとその依存関係を含むアプリケーションが生成されます。 そのアプリケーションのユーザーは、.NET Core ランタイムがインストールされていないコンピューター上でそれを実行することができます。

引用: Microsoft.com – .NET Core アプリケーションの発行の概要

メリット

  • .Net Coreのバージョンを固定できる
  • 実行環境にランタイムを事前にインストールしなくてよい

デメリット

  • 実行ファイルの容量が大きくなってしまう(Hello Worldだけで約70MB)
  • .Net Coreのバージョンアップが困難

 

発行手順

この記事では自己完結型で説明していきたいと思います。
(ランタイム依存での発行は3番の配置モードで「ランタイム依存」を選択)

  1. プロジェクト右クリック → 発行
  2. フォルダー → [次へ(N)]
  3. [完了(F)]
  4. ターゲットランタイムのをクリック
  5. 配置モード: 自己完結, ターゲットランタイム: linux-x64に変更 → [保存]
  6. [発行(U)]
  7. 実行ファイル(拡張子なし)とランタイムなど (HelloWorldだけで約75BM)
    \(project name)\bin\Release\netcoreapp3.1\linux-x64にあります。

実行

./(実行ファイル名)

で実行可能です。

$ cd /mmt/c/Users/(省略)/netcoreapp3.1/linux-x-64
$ ./HelloLinux
Hello World! 
  • WSLからWindowsのCドライブにマウントできます。
  • /mnt/{ドライブ名}からアクセスできます。
    Cドライブの場合は /mnt/c です。
  • 自己完結型で発行 → WSLに.Net Coreをインストール無しで実行できます。