C#をLinuxで始める完全ガイド|環境構築から実行・開発まで初心者向けに解説

はじめに

C#はWindows専用の言語というイメージを持たれがちですが、現在はLinuxでも問題なく開発できます。特に.NETがクロスプラットフォーム対応になってからは、UbuntuやDebian、Fedora、CentOS StreamなどのLinux環境で、C#のコンソールアプリ、Webアプリ、API、バッチ処理、サーバーアプリを開発・実行できるようになりました。

この記事では、「csharp linux」「C# Linux」「LinuxでC#を始めたい」と考えている初心者向けに、C#をLinuxで開発するための基礎知識、.NET SDKのインストール方法、VS Codeの設定、Hello Worldの作成、ビルド、公開、よくあるエラー対処法までを順番に解説します。

Linuxに慣れていない人でも、ターミナルで実行するコマンドを確認しながら進めれば、C#の開発環境を作ることができます。

1. C#はLinuxで開発できる?初心者が最初に知るべき基本

1-1. LinuxでもC#が使える理由

C#はもともとMicrosoftが開発したプログラミング言語ですが、現在の.NETはWindows、Linux、macOSで利用できるクロスプラットフォームな開発基盤です。.NETはLinux向けにも公式に提供されており、パッケージマネージャー、Snap、手動インストール、コンテナイメージなど複数の方法で導入できます。

そのため、Linux上でも次のようなことができます。

Bash
dotnet new console
dotnet run

このように、LinuxのターミナルからC#プロジェクトを作成し、そのまま実行できます。Windows版Visual Studioがなくても、.NET SDKとエディタがあればC#開発は可能です。

1-2. .NETとC#の関係

C#はプログラミング言語で、.NETはC#で作ったアプリを開発・実行するためのプラットフォームです。

たとえば、C#で次のようなコードを書いたとします。

C#
Console.WriteLine("Hello, Linux!");

このコードをコンパイルし、実行できる形にするのが.NET SDKや.NETランタイムの役割です。

関係を簡単に整理すると、次のようになります。

項目役割
C#プログラミング言語
.NETアプリを作るための開発・実行基盤
.NET SDK開発、ビルド、実行に必要なツール一式
.NET Runtime作成済みアプリを実行するための環境
dotnetコマンドプロジェクト作成、実行、ビルドなどを行うCLI

初心者がLinuxでC#を始める場合は、まず.NET SDKをインストールすれば問題ありません。

1-3. .NET Framework・.NET・Monoの違い

C#の情報を調べていると、「.NET Framework」「.NET」「Mono」という言葉が出てきます。これらは似ていますが、役割や対象環境が異なります。

.NET Frameworkは、主にWindows向けの従来型フレームワークです。Windows FormsやWPFなど、Windowsデスクトップアプリ開発で使われてきました。ただし、基本的にはWindows向けであり、Linuxで新しくC#を始める場合の第一候補ではありません。

.NETは、現在主流のクロスプラットフォームな開発基盤です。Linux、Windows、macOSで動作し、コンソールアプリ、Webアプリ、API、クラウドアプリ、マイクロサービスなど幅広い用途に使えます。

Monoは、.NET Framework時代からLinuxやmacOSでC#を動かすために使われてきた実装です。現在でもUnityや一部の特殊な環境で関係しますが、一般的なLinuxでのC#開発では、まず公式の.NET SDKを使うのがおすすめです。

これからC#をLinuxで学ぶなら、「C# + .NET SDK + VS Code」という構成で始めるのがもっともわかりやすいです。

1-4. LinuxでC#開発を始めるメリットと注意点

LinuxでC#を開発するメリットは多くあります。

まず、サーバー環境に近い状態で開発できます。ASP.NET Coreを使ったWebアプリやAPIはLinuxサーバー上で運用されることも多いため、開発環境もLinuxにしておくと、本番環境との差を小さくできます。

次に、DockerやGit、SSH、systemdなど、サーバー開発でよく使うツールと相性が良い点も大きなメリットです。C#で作ったアプリをLinuxサーバーに配置し、systemdで常駐化するような流れも自然に学べます。

一方で注意点もあります。Windows専用APIに依存したC#アプリは、そのままLinuxでは動かない場合があります。たとえば、Windows FormsやWPFなどのWindowsデスクトップ技術、Windows固有のファイルパス、レジストリ、COMコンポーネントなどに依存している場合は注意が必要です。

LinuxでC#を使う場合は、最初からクロスプラットフォーム対応を意識して開発することが大切です。

1-5. Linuxで開発できるC#アプリの種類

Linuxでは、次のようなC#アプリを開発できます。

種類
コンソールアプリ学習用アプリ、CLIツール、バッチ処理
WebアプリASP.NET Core MVC、Razor Pages
Web APIREST API、バックエンドサーバー
常駐アプリsystemdで動かすワーカーサービス
Dockerアプリコンテナ化したC#アプリ
クラウドアプリAzure、AWS、GCP向けアプリ
テストプロジェクトxUnit、NUnit、MSTest

初心者は、まずコンソールアプリでC#の文法とdotnetコマンドに慣れ、その後ASP.NET CoreやDockerに進むと理解しやすいです。

2. LinuxでC#を始めるために必要なもの

2-1. 必要なソフトウェア一覧

LinuxでC#開発を始めるために必要なものは、基本的には次の4つです。

ソフトウェア役割
.NET SDKC#アプリの作成、ビルド、実行
VS Codeコードを書くためのエディタ
C#拡張機能補完、デバッグ、エラー表示
Gitソースコード管理

最低限、.NET SDKとターミナルがあればC#アプリは作れます。ただし、学習効率を考えるとVS Codeも入れておくのがおすすめです。

2-2. 対応しているLinuxディストリビューション

.NETは多くのLinuxディストリビューションで利用できます。Microsoftの公式ドキュメントでは、Debian、Ubuntu、Fedora、RHEL、CentOS Stream、openSUSE、SUSE Linux Enterprise Server、Alpineなどの情報が提供されています。

初心者におすすめしやすいのは、次のディストリビューションです。

ディストリビューション特徴
Ubuntu情報が多く、初心者向け
Debian安定性が高い
Fedora新しいパッケージを試しやすい
CentOS StreamRHEL系の学習に向いている
Linux MintUbuntu系でデスクトップ用途に使いやすい

迷った場合は、Ubuntu LTSを選ぶと情報量が多く、トラブル時にも調べやすいです。

2-3. .NET SDKとランタイムの違い

.NET SDKと.NET Runtimeは混同しやすいポイントです。

.NET SDKは、C#アプリを開発するためのツールです。プロジェクト作成、ビルド、実行、パッケージ管理などができます。開発者は基本的にSDKをインストールします。

.NET Runtimeは、作成済みの.NETアプリを実行するための環境です。開発はせず、サーバー上でアプリを動かすだけならランタイムのみで十分な場合があります。

初心者がLinuxでC#を始めるなら、次のように考えれば大丈夫です。

開発するPC → .NET SDKをインストール
実行だけするサーバー → .NET RuntimeまたはASP.NET Core Runtimeをインストール

.NET SDKをインストールすると、対応するランタイムも含まれるため、学習環境ではSDKだけ入れれば問題ありません。

2-4. エディタはVS Codeがおすすめ

LinuxでC#を書くエディタとしては、VS Codeがおすすめです。軽量で拡張機能が豊富で、Linuxでも使いやすいからです。

VS Codeを使うと、次のような機能を利用できます。

  • C#コードの補完

  • エラー表示

  • 定義ジャンプ

  • デバッグ実行

  • ターミナル統合

  • Git連携

  • 日本語表示

もちろん、Vim、Neovim、JetBrains RiderなどでもC#開発は可能です。ただし、初心者が最初に環境構築するなら、情報が多く設定しやすいVS Codeが無難です。

2-5. 初心者におすすめの環境構成

初心者には、次の構成がおすすめです。

OS: Ubuntu LTS
開発環境: .NET SDK
エディタ: VS Code
拡張機能: C# Dev Kit または C# 拡張機能
バージョン管理: Git

Ubuntuを使う理由は、公式ドキュメントや解説記事が多く、トラブルシューティングしやすいためです。また、LinuxサーバーでもUbuntuはよく使われるため、学習した知識をそのまま実務や個人開発に活かしやすいです。

3. Linuxに.NET SDKをインストールする方法

3-1. Ubuntuに.NET SDKをインストールする手順

Ubuntuでは、バージョンによって利用できる.NETのパッケージソースが異なります。Ubuntu 22.04以降では、Ubuntu側のフィードやバックポートを使って.NETをインストールでき、Ubuntu 24.04以降ではMicrosoftパッケージリポジトリからの配布方針にも注意が必要です。

基本的なインストール例は次の通りです。

Bash
sudo apt update
sudo apt install dotnet-sdk-10.0

.NET 8を使いたい場合は、次のようにバージョン番号を変えます。

Bash
sudo apt update
sudo apt install dotnet-sdk-8.0

インストールできるSDKのバージョンは、Ubuntuのバージョンや有効になっているリポジトリによって変わります。うまくインストールできない場合は、まず次のコマンドでパッケージ候補を確認します。

Bash
apt search dotnet-sdk

バックポートリポジトリを追加する場合は、次のように実行します。

Bash
sudo add-apt-repository ppa:dotnet/backports
sudo apt update

その後、必要なバージョンのSDKをインストールします。

Bash
sudo apt install dotnet-sdk-10.0

注意点として、Ubuntuの標準リポジトリとMicrosoftリポジトリを混在させると、パッケージの競合やバージョン解決の問題が起きることがあります。1つの方法に統一して管理するのがおすすめです。

3-2. Debianに.NET SDKをインストールする手順

Debianでは、Microsoftパッケージリポジトリを登録してから.NET SDKをインストールする方法が一般的です。公式ドキュメントでも、SDKをインストールする場合は、たとえば次のようにdotnet-sdk-10.0をaptで導入する手順が示されています。

まず、パッケージリポジトリを登録します。

Bash
source /etc/os-release

wget https://packages.microsoft.com/config/debian/$VERSION_ID/packages-microsoft-prod.deb -O packages-microsoft-prod.deb

sudo dpkg -i packages-microsoft-prod.deb

rm packages-microsoft-prod.deb

次に、パッケージ一覧を更新してSDKをインストールします。

Bash
sudo apt-get update
sudo apt-get install -y dotnet-sdk-10.0

.NET 8を使いたい場合は、次のようにします。

Bash
sudo apt-get update
sudo apt-get install -y dotnet-sdk-8.0

Debian派生ディストリビューションでは、$VERSION_IDが期待通りにならない場合があります。その場合は、Debian本体の対応バージョンに合わせて手動でリポジトリURLを確認してください。

3-3. Fedora・CentOS系に.NET SDKをインストールする手順

Fedoraでは、dnfを使って.NET SDKをインストールできます。公式ドキュメントでも、Fedora向けに次のようなコマンド例が示されています。

Bash
sudo dnf install dotnet-sdk-9.0

また、利用可能であれば次のように.NET 8をインストールできます。

Bash
sudo dnf install dotnet-sdk-8.0

CentOS StreamやRHEL系では、AppStreamリポジトリから.NETをインストールできる場合があります。CentOS Stream 9や10、RHEL 8などでは、次のようなコマンドでSDKを導入できます。

Bash
sudo dnf install dotnet-sdk-10.0

インストール可能なバージョンはディストリビューションのバージョンによって異なります。うまく入らない場合は、次のコマンドで候補を確認します。

Bash
dnf search dotnet-sdk

または、パッケージ情報を確認します。

Bash
dnf info dotnet-sdk-10.0

3-4. インストール後にバージョンを確認する方法

.NET SDKをインストールしたら、まず次のコマンドでバージョンを確認します。

Bash
dotnet --version

詳細情報を確認したい場合は、次のコマンドを使います。

Bash
dotnet --info

インストール済みのSDK一覧を確認するには、次のコマンドを使います。

Bash
dotnet --list-sdks

インストール済みのランタイム一覧を確認するには、次のコマンドを使います。

Bash
dotnet --list-runtimes

dotnetコマンドには、プロジェクト操作と.NETアプリ実行の2つの役割があり、--version--info--list-sdks--list-runtimesなどで環境情報を確認できます。

3-5. 複数バージョンの.NET SDKを管理する方法

Linuxでは、複数の.NET SDKを同時にインストールできます。

Bash
dotnet --list-sdks

たとえば、次のように複数のSDKが表示されることがあります。

8.0.4xx [/usr/share/dotnet/sdk]
9.0.3xx [/usr/share/dotnet/sdk]
10.0.1xx [/usr/share/dotnet/sdk]

プロジェクトごとに使用するSDKバージョンを固定したい場合は、global.jsonを使います。

Bash
dotnet new globaljson --sdk-version 10.0.100

これにより、そのディレクトリ配下のプロジェクトでは指定したSDKバージョンが優先されます。チーム開発では、開発者ごとのSDK差分を減らせるため便利です。

4. VS CodeでC#開発環境を整える

4-1. LinuxにVS Codeをインストールする

UbuntuやDebian系では、公式のdebパッケージを使ってVS Codeをインストールできます。デスクトップ環境を使っている場合は、公式サイトから.debファイルをダウンロードしてインストールする方法が簡単です。

コマンドでインストールする場合は、環境に応じてMicrosoftのリポジトリを追加してからインストールします。

Bash
sudo apt update
sudo apt install code

Fedora系では、rpmパッケージやリポジトリを使ってインストールできます。

Bash
sudo dnf install code

インストール後、ターミナルで次のコマンドを実行するとVS Codeを起動できます。

Bash
code

プロジェクトフォルダをVS Codeで開く場合は、次のようにします。

Bash
code .

4-2. C#開発に必要な拡張機能

VS CodeでC#を快適に書くには、C#向けの拡張機能を入れます。

代表的な拡張機能は次の通りです。

拡張機能役割
C# Dev KitC#開発支援、プロジェクト管理、デバッグ
C#C#の補完、解析、デバッグ
.NET Install Tool.NET関連ツールの補助
Japanese Language PackVS Codeの日本語化

初心者は、まず「C# Dev Kit」を入れるとよいでしょう。必要に応じて「C#」拡張機能や日本語パックも追加します。

拡張機能は、VS Code左側の拡張機能アイコンから検索してインストールできます。

4-3. ターミナルとVS Codeを連携する

VS Codeには統合ターミナルがあります。メニューから「ターミナル」→「新しいターミナル」を選ぶと、VS Code内でLinuxのシェルを開けます。

C#プロジェクトを開いた状態で、統合ターミナルから次のように実行できます。

Bash
dotnet run

これにより、コード編集から実行までをVS Code内で完結できます。

よく使う流れは次の通りです。

Bash
mkdir MyApp
cd MyApp
dotnet new console
code .
dotnet run

VS Codeの画面とターミナルを行き来しながら作業できるため、初心者でも開発の流れをつかみやすいです。

4-4. 補完・デバッグ・エラー表示を有効にする

C#拡張機能を入れると、コード補完やエラー表示が使えるようになります。

たとえば、次のように入力したときに候補が表示されます。

C#
Console.

WriteLineなどの候補が表示されれば、補完機能が動いています。

デバッグを行うには、VS Codeの「実行とデバッグ」から構成を作成します。C#プロジェクトを開いていると、VS Codeが自動でデバッグ構成を提案してくれることがあります。

ブレークポイントを設定し、デバッグ実行すると、変数の中身を確認しながらプログラムを実行できます。初心者のうちは、エラーが出た箇所だけでなく、変数がどのように変化しているかを見る習慣をつけると理解が深まります。

4-5. 日本語環境で使いやすくする設定

VS Codeを日本語で使いたい場合は、「Japanese Language Pack for Visual Studio Code」をインストールします。

インストール後、コマンドパレットを開きます。

Ctrl + Shift + P

次に、次のコマンドを検索します。

Configure Display Language

jaを選択してVS Codeを再起動すると、日本語表示になります。

また、フォントやターミナルの文字化けが気になる場合は、等幅フォントを設定しておくと見やすくなります。Linux環境では、Noto Sans MonoUbuntu Monoなどが使いやすいです。

5. LinuxでC#のHello Worldを作成・実行する

5-1. dotnet newでコンソールアプリを作成する

まず、作業用フォルダを作成します。

Bash
mkdir HelloCSharp
cd HelloCSharp

次に、C#のコンソールアプリを作成します。

Bash
dotnet new console

実行すると、次のようなファイルが作成されます。

HelloCSharp/
├── HelloCSharp.csproj
└── Program.cs

Program.csがC#のソースコードで、.csprojファイルがプロジェクト設定ファイルです。

5-2. Program.csの基本構造を理解する

作成されたProgram.csを開くと、次のようなコードがあります。

C#
Console.WriteLine("Hello, World!");

最近のC#では、トップレベルステートメントという書き方が使われており、class Programstatic void Mainを書かなくても実行できます。

従来の書き方にすると、次のようになります。

C#
using System;

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

初心者は、最初はシンプルなトップレベルステートメントで学び、クラスやメソッドに慣れてきたら従来の構造も理解するとよいでしょう。

5-3. dotnet runでC#プログラムを実行する

作成したC#プログラムを実行するには、次のコマンドを使います。

Bash
dotnet run

実行結果は次のようになります。

Hello, World!

Program.csを次のように変更してみます。

C#
Console.WriteLine("Hello, Linux!");
Console.WriteLine("C#をLinuxで実行しています。");

再度実行します。

Bash
dotnet run

結果は次のようになります。

Hello, Linux!
C#をLinuxで実行しています。

このように、Linux上でもC#コードを編集してすぐに実行できます。

5-4. dotnet buildでビルドする

dotnet runは、ビルドと実行をまとめて行うコマンドです。ビルドだけ行いたい場合は、次のコマンドを使います。

Bash
dotnet build

成功すると、次のようなメッセージが表示されます。

Build succeeded.

ビルド成果物は、通常次のようなディレクトリに作成されます。

bin/Debug/net10.0/

ビルドエラーがある場合は、どのファイルの何行目でエラーが起きたかが表示されます。エラーメッセージを読む習慣をつけることが、C#学習では非常に重要です。

5-5. よく使うdotnetコマンド一覧

LinuxでC#開発をするときによく使うdotnetコマンドは次の通りです。

コマンド役割
dotnet --versionSDKバージョンを表示
dotnet --info環境情報を表示
dotnet new consoleコンソールアプリを作成
dotnet new webapiWeb APIプロジェクトを作成
dotnet runアプリを実行
dotnet buildアプリをビルド
dotnet cleanビルド結果を削除
dotnet testテストを実行
dotnet add packageNuGetパッケージを追加
dotnet restore依存関係を復元
dotnet publish配布用に発行

C# Linux開発では、VS Codeよりも先にdotnetコマンドに慣れておくと、環境が変わっても対応しやすくなります。

6. LinuxでC#アプリを開発する基本フロー

6-1. プロジェクト作成から実行までの流れ

LinuxでC#アプリを開発する基本フローは次の通りです。

Bash
mkdir MyApp
cd MyApp
dotnet new console
code .
dotnet run

実際の開発では、次のような流れになります。

1. プロジェクトを作成する
2. Program.csやクラスファイルを編集する
3. dotnet buildでエラーを確認する
4. dotnet runで実行する
5. 必要に応じてNuGetパッケージを追加する
6. Gitで変更を管理する
7. dotnet publishで公開用ファイルを作る

最初は小さなコンソールアプリを作り、ファイル入力、条件分岐、ループ、クラス、例外処理などを少しずつ試していくのがおすすめです。

6-2. NuGetパッケージを追加する方法

C#では、外部ライブラリをNuGetパッケージとして追加できます。たとえば、JSON操作でよく使われるNewtonsoft.Jsonを追加するには、次のコマンドを使います。

Bash
dotnet add package Newtonsoft.Json

追加後、.csprojファイルにパッケージ参照が追加されます。

XML
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="..." />
</ItemGroup>

コードから使う例は次の通りです。

C#
using Newtonsoft.Json;

var user = new
{
Name = "Taro",
Age = 25
};

string json = JsonConvert.SerializeObject(user);
Console.WriteLine(json);

パッケージを追加したあとは、通常dotnet rundotnet buildのタイミングで復元されます。明示的に復元する場合は、次のコマンドを使います。

Bash
dotnet restore

6-3. ファイル分割とクラス作成の基本

C#では、コードが長くなってきたらファイルを分割します。

たとえば、User.csを作成します。

C#
public class User
{
public string Name { get; set; } = "";
public int Age { get; set; }

public void Introduce()
{
Console.WriteLine($"私は{Name}です。{Age}歳です。");
}
}

Program.csから呼び出します。

C#
var user = new User
{
Name = "Taro",
Age = 25
};

user.Introduce();

同じプロジェクト内にある.csファイルは、自動的にビルド対象になります。そのため、特別な設定をしなくてもUser.csを追加するだけで利用できます。

クラスを分けることで、プログラムの役割が整理され、読みやすくなります。

6-4. VS Codeでデバッグ実行する方法

VS CodeでC#をデバッグするには、プロジェクトフォルダを開いた状態で、左側の「実行とデバッグ」を選びます。

基本的な手順は次の通りです。

1. C#プロジェクトをVS Codeで開く
2. C#拡張機能を有効にする
3. Program.csの行番号左をクリックしてブレークポイントを設定する
4. 実行とデバッグを開始する
5. 変数やコールスタックを確認する

たとえば、次のようなコードを書きます。

C#
int x = 10;
int y = 20;
int result = x + y;

Console.WriteLine(result);

resultの行にブレークポイントを設定すると、実行中に処理が一時停止し、xyの値を確認できます。

デバッグを使えるようになると、エラーの原因を推測だけで探す必要がなくなります。C#初心者ほど、早めにデバッグ実行に慣れておくと学習効率が上がります。

6-5. Gitでソースコードを管理する方法

C#開発では、Gitでソースコードを管理するのがおすすめです。

まず、プロジェクトフォルダでGitを初期化します。

Bash
git init

.gitignoreを作成します。

Bash
dotnet new gitignore

これにより、binobjなど、Git管理しなくてよいファイルを除外できます。

最初のコミットを作成します。

Bash
git add .
git commit -m "Initial commit"

GitHubなどのリモートリポジトリに送る場合は、次のように設定します。

Bash
git remote add origin <リポジトリURL>
git branch -M main
git push -u origin main

LinuxでC#を学ぶ場合でも、Gitの基本操作は早めに覚えておくと実務に近い開発フローを身につけられます。

7. LinuxでC#アプリを公開・配布する方法

7-1. dotnet publishで実行ファイルを作成する

開発中はdotnet runで実行できますが、配布やサーバー配置をする場合はdotnet publishを使います。

基本のコマンドは次の通りです。

Bash
dotnet publish -c Release

-c Releaseは、Release構成でビルドする指定です。公開用ファイルは、通常次のような場所に作成されます。

bin/Release/net10.0/publish/

この中にあるファイルをサーバーへコピーすれば、アプリを実行できます。

Bash
dotnet MyApp.dll

コンソールアプリだけでなく、ASP.NET CoreアプリをLinuxサーバーに配置する場合にもdotnet publishを使います。

7-2. フレームワーク依存と自己完結型の違い

.NETアプリの配布方法には、大きく分けて「フレームワーク依存」と「自己完結型」があります。

フレームワーク依存は、実行先の環境に.NETランタイムがインストールされている前提でアプリを配布する方法です。ファイルサイズが小さく、更新もしやすいのが特徴です。

Bash
dotnet publish -c Release

実行するときは次のようにします。

Bash
dotnet MyApp.dll

自己完結型は、アプリ本体に.NETランタイムも含めて配布する方法です。実行先に.NETが入っていなくても動かしやすい一方、ファイルサイズは大きくなります。

Linux x64向けに自己完結型で発行する例は次の通りです。

Bash
dotnet publish -c Release -r linux-x64 --self-contained true

用途に応じて使い分けましょう。

サーバーに.NETを入れて管理する → フレームワーク依存
.NET未導入環境に配布したい → 自己完結型

7-3. Windows向け・Linux向けにビルドする方法

.NETでは、ランタイム識別子を指定して、特定OS向けに発行できます。

Linux x64向けに発行する場合は次の通りです。

Bash
dotnet publish -c Release -r linux-x64

Windows x64向けに発行する場合は次の通りです。

Bash
dotnet publish -c Release -r win-x64

Linux ARM64向けに発行する場合は次の通りです。

Bash
dotnet publish -c Release -r linux-arm64

ただし、OS固有の機能を使っている場合は、別OS向けにビルドできても実行時に問題が出ることがあります。クロスプラットフォーム対応を意識するなら、ファイルパスや改行コード、文字コード、権限、外部コマンドの違いに注意しましょう。

7-4. サーバー上でC#アプリを実行する方法

Linuxサーバー上でC#アプリを実行する基本手順は次の通りです。

まず、ローカルで公開用ファイルを作成します。

Bash
dotnet publish -c Release

次に、公開されたファイルをサーバーへコピーします。

Bash
scp -r bin/Release/net10.0/publish/ user@example.com:/home/user/myapp

サーバーにSSHで接続します。

Bash
ssh user@example.com

アプリのディレクトリへ移動します。

Bash
cd /home/user/myapp

フレームワーク依存のアプリなら、次のように実行します。

Bash
dotnet MyApp.dll

ASP.NET Coreアプリの場合は、必要に応じて環境変数を指定します。

Bash
ASPNETCORE_URLS=http://0.0.0.0:5000 dotnet MyWebApp.dll

本番環境では、直接ターミナルから起動するのではなく、systemdやNginxと組み合わせて運用するのが一般的です。

7-5. systemdでC#アプリを常駐化する方法

LinuxサーバーでC#アプリを常駐させたい場合は、systemdを使います。

まず、サービスファイルを作成します。

Bash
sudo nano /etc/systemd/system/myapp.service

内容の例は次の通りです。

INI
[Unit]
Description=My C# App
After=network.target

[Service]
WorkingDirectory=/home/user/myapp
ExecStart=/usr/bin/dotnet /home/user/myapp/MyApp.dll
Restart=always
RestartSec=10
SyslogIdentifier=myapp
User=user
Environment=DOTNET_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target

設定を反映します。

Bash
sudo systemctl daemon-reload

サービスを起動します。

Bash
sudo systemctl start myapp

自動起動を有効にします。

Bash
sudo systemctl enable myapp

状態を確認します。

Bash
sudo systemctl status myapp

ログを確認する場合は、次のコマンドを使います。

Bash
journalctl -u myapp -f

これで、Linuxサーバー上でC#アプリを常駐プロセスとして運用できます。

8. LinuxでC#を使うときのよくあるエラーと対処法

8-1. dotnetコマンドが見つからない場合

次のようなエラーが出る場合があります。

dotnet: command not found

これは、.NET SDKがインストールされていないか、PATHが通っていない状態です。

まず、インストールされているか確認します。

Bash
which dotnet

何も表示されない場合は、SDKが入っていない可能性があります。Ubuntuなら次のようにインストールします。

Bash
sudo apt update
sudo apt install dotnet-sdk-10.0

インストール済みなのに見つからない場合は、PATHを確認します。

Bash
echo $PATH

手動インストールした場合は、.bashrc.zshrcに次のような設定が必要なことがあります。

Bash
export DOTNET_ROOT=$HOME/.dotnet
export PATH=$PATH:$HOME/.dotnet:$HOME/.dotnet/tools

設定後、シェルを再読み込みします。

Bash
source ~/.bashrc

8-2. SDKがインストールされていないと言われる場合

次のようなメッセージが出ることがあります。

The command could not be loaded, possibly because:
* You intended to execute a .NET application:
* You intended to execute a .NET SDK command:
No .NET SDKs were found.

これは、ランタイムだけがインストールされていて、SDKが入っていない場合によく起こります。

確認します。

Bash
dotnet --list-sdks

何も表示されない場合は、SDKをインストールします。

Bash
sudo apt update
sudo apt install dotnet-sdk-10.0

ランタイム一覧は表示されるのにSDK一覧が空の場合、開発環境としては不足しています。C#コードを書くPCにはランタイムではなくSDKを入れましょう。

8-3. VS Codeで補完やデバッグが動かない場合

VS CodeでC#の補完が効かない場合は、次の点を確認します。

1. .NET SDKがインストールされているか
2. C#拡張機能が有効になっているか
3. プロジェクトフォルダを正しく開いているか
4. .csprojファイルが存在するか
5. VS Codeを再起動したか

まず、ターミナルで確認します。

Bash
dotnet --info

次に、プロジェクトルートでVS Codeを開きます。

Bash
code .

単にProgram.csだけを開いた場合、VS Codeがプロジェクト全体を認識できず、補完やデバッグがうまく動かないことがあります。必ず.csprojがあるフォルダを開きましょう。

それでも動かない場合は、拡張機能を無効化・再有効化するか、VS Codeを再起動します。

8-4. 実行権限やパスの問題が出る場合

Linuxでは、Windowsと違って実行権限やパス区切りに注意が必要です。

自己完結型で発行した実行ファイルを直接実行する場合、権限がないと次のようなエラーになります。

Permission denied

実行権限を付けます。

Bash
chmod +x MyApp

その後、次のように実行します。

Bash
./MyApp

また、Linuxではパス区切りに/を使います。

Windows: C:\Users\Taro\file.txt
Linux: /home/taro/file.txt

C#コード内でパスを組み立てる場合は、文字列で/\を直接書くのではなく、Path.Combineを使うと安全です。

C#
string path = Path.Combine("data", "input.txt");

8-5. Windowsで作ったC#アプリがLinuxで動かない場合

Windowsで作ったC#アプリがLinuxで動かない原因としては、次のようなものがあります。

原因対処法
Windows専用APIを使っているクロスプラットフォーム対応APIに変更
パス区切りが\固定Path.Combineを使う
大文字小文字の違いファイル名を正確に指定
文字コードの違いUTF-8を使う
改行コードの違いEnvironment.NewLineを使う
外部コマンドがWindows専用Linux用コマンドに変更

Linuxのファイルシステムでは、大文字小文字が区別されます。

data.txt
Data.txt

この2つはLinuxでは別ファイルとして扱われます。Windowsでは気づきにくい問題なので、ファイル名の指定には注意しましょう。

また、Windows FormsやWPFなど、Windowsデスクトップ向け技術に依存しているアプリはLinuxでそのまま動かすのが難しい場合があります。Linux対応を重視するなら、コンソールアプリ、ASP.NET Core、Web API、Worker Serviceなどから始めるのがおすすめです。

9. LinuxでC#を学ぶ次のステップ

9-1. コンソールアプリの次に学ぶべき内容

Hello Worldができたら、次はC#の基本文法を学びます。

優先して学ぶべき内容は次の通りです。

1. 変数と型
2. if文
3. for文・while文
4. 配列・List
5. メソッド
6. クラス
7. プロパティ
8. 例外処理
9. ファイル入出力
10. LINQ

Linux環境では、ファイル操作やコマンドライン引数を使った小さなツールを作ると実践的です。

たとえば、次のようなアプリを作ってみるとよいでしょう。

・入力した文字をファイルに保存するメモアプリ
・CSVファイルを読み込んで集計するアプリ
・指定ディレクトリ内のファイル一覧を表示するCLIツール
・ログファイルから特定の文字列を検索するツール

C#の基本とLinuxの操作を同時に学べるため、実用的なスキルが身につきます。

9-2. ASP.NET CoreでWebアプリを作る

C#をLinuxで使う大きなメリットの1つが、ASP.NET CoreでWebアプリやAPIを開発できることです。

Web APIプロジェクトを作成するには、次のコマンドを使います。

Bash
dotnet new webapi -o MyApi
cd MyApi
dotnet run

起動後、表示されたURLにアクセスするとAPIを確認できます。

ASP.NET Coreでは、次のような開発ができます。

・REST API
・Webアプリ
・認証機能付きアプリ
・管理画面
・バックエンドサーバー
・マイクロサービス

Linuxサーバーと相性が良いため、C#でWeb開発をしたい人はASP.NET Coreに進むのがおすすめです。

9-3. DockerでC#アプリを動かす

LinuxでC#を学ぶなら、Dockerも合わせて学ぶと実践的です。

簡単なDockerfileの例は次の通りです。

dockerfile
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app

FROM mcr.microsoft.com/dotnet/runtime:10.0
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyApp.dll"]

Dockerイメージをビルドします。

Bash
docker build -t myapp .

コンテナを実行します。

Bash
docker run --rm myapp

ASP.NET Coreの場合は、ランタイムイメージにaspnetを使います。

dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:10.0

Dockerを使うと、ローカル環境と本番環境の差を減らしやすくなります。

9-4. LinuxサーバーにC#アプリをデプロイする

C#アプリをLinuxサーバーにデプロイする基本構成は次のようになります。

C# / ASP.NET Core

dotnet publish

Linuxサーバーへ配置

systemdで常駐化

Nginxでリバースプロキシ

HTTPS化

Webアプリの場合、Nginxを前段に置いてリバースプロキシする構成がよく使われます。

ASP.NET Coreアプリをローカルポート5000で動かし、Nginxが80番や443番で受ける形です。

ユーザー

Nginx

ASP.NET Coreアプリ

この流れを理解すると、Linux上でC#アプリを本格的に運用できるようになります。

9-5. 初心者におすすめの学習ロードマップ

LinuxでC#を学ぶなら、次の順番がおすすめです。

1. Linuxの基本操作を覚える
2. .NET SDKをインストールする
3. dotnet new / run / buildに慣れる
4. C#の基本文法を学ぶ
5. クラスとオブジェクト指向を理解する
6. ファイル操作や例外処理を学ぶ
7. NuGetパッケージを使う
8. Gitでコード管理する
9. ASP.NET CoreでWeb APIを作る
10. Dockerで動かす
11. Linuxサーバーにデプロイする
12. systemdとNginxで運用する

最初からすべてを理解する必要はありません。まずは「LinuxでC#のコードを書いて実行できる」状態を作ることが大切です。

小さな成功体験を積み重ねることで、C# Linux開発の全体像が自然に見えてきます。

まとめ

C#は現在、Linuxでも十分に開発できるプログラミング言語です。.NETがクロスプラットフォーム対応しているため、Ubuntu、Debian、Fedora、CentOS StreamなどのLinux環境で、C#アプリを作成・実行・公開できます。

初心者がLinuxでC#を始めるなら、まずは次の構成を用意しましょう。

Linuxディストリビューション: Ubuntu LTSなど
開発環境: .NET SDK
エディタ: VS Code
拡張機能: C# Dev Kit
ソース管理: Git

最初に覚えるべきコマンドは、次の5つです。

Bash
dotnet --version
dotnet new console
dotnet run
dotnet build
dotnet publish

これだけでも、C#の基本的な開発フローを体験できます。

LinuxでC#を使えるようになると、コンソールアプリ、Web API、ASP.NET Coreアプリ、Dockerアプリ、Linuxサーバー上の常駐アプリなど、幅広い開発に進めます。

まずは小さなHello Worldから始め、少しずつクラス、NuGet、Git、デバッグ、公開、サーバー運用へとステップアップしていきましょう。