C#でexeファイルを作成する方法|Visual Studioで実行ファイル化・配布まで完全解説

はじめに

C#で作成したアプリを他の人に使ってもらうには、最終的に「exeファイル」として実行できる形にする必要があります。Visual Studioで開発していると、画面上の「開始」ボタンで簡単に動作確認できますが、配布や本番利用を考える場合は、ビルド、発行、ランタイム、dll、設定ファイルなどの仕組みを理解しておくことが重要です。

特に、C#のexeファイルは「exeファイル1つだけを渡せば必ず動く」とは限りません。.NET Frameworkで作るのか、現在の.NETで作るのか、フレームワーク依存型で配布するのか、自己完結型で配布するのかによって、必要なファイルや実行条件が変わります。

この記事では、C#でexeファイルを作成する基本から、Visual Studioを使った実行ファイル化、Releaseビルド、発行、単一ファイル化、他のPCへの配布、よくあるエラーの解決策まで、初心者にも分かりやすく解説します。

1. C#でexeファイルを作成する前に知っておきたい基礎知識

1-1. C#のexeファイルとは

C#のexeファイルとは、C#で作成したアプリケーションをWindows上で実行するための実行ファイルです。拡張子は「.exe」で、ユーザーはエクスプローラーからダブルクリックしたり、コマンドプロンプトやPowerShellから実行したりできます。

ただし、C#で作ったexeファイルは、C++などで作成した完全なネイティブ実行ファイルとは仕組みが異なります。多くの場合、C#のプログラムは.NETランタイム上で動作します。そのため、配布先のPCに必要な.NETランタイムが入っていないと、exeファイルを起動できないことがあります。

一方で、現在の.NETでは「自己完結型」や「単一ファイル」として発行することも可能です。単一ファイル配置では、アプリの依存ファイルを1つのバイナリにまとめて配布できます。Microsoft公式ドキュメントでも、単一ファイル配置はフレームワーク依存型と自己完結型の両方で利用できると説明されています。Microsoft Learn

1-2. Visual Studioで作成できる実行ファイルの種類

Visual StudioでC#プロジェクトを作成すると、用途に応じてさまざまな種類のexeファイルを作成できます。代表的なものは、コンソールアプリ、Windowsフォームアプリ、WPFアプリです。

コンソールアプリは、黒い画面に文字を表示して処理を行うシンプルなアプリです。学習用、バッチ処理、ツール作成、自動化処理などに向いています。

Windowsフォームアプリは、ボタン、テキストボックス、ラベルなどを配置して作るデスクトップアプリです。比較的簡単に画面付きのWindowsアプリを作れるため、業務ツールや社内アプリの作成によく使われます。

WPFアプリは、より柔軟で高度な画面デザインができるデスクトップアプリです。デザイン性の高い画面、データバインディング、複雑なUIを作りたい場合に適しています。

どの種類でも、最終的にはexeファイルとして実行できる形にできます。ただし、必要なdllや設定ファイル、配布方法はプロジェクトの種類や利用しているライブラリによって変わります。

1-3. DebugビルドとReleaseビルドの違い

C#でexeファイルを作成するときに必ず理解しておきたいのが、DebugビルドとReleaseビルドの違いです。

Debugビルドは、開発中の確認やデバッグを目的としたビルドです。変数の状態を確認したり、ブレークポイントで処理を止めたりしやすいように、デバッグ情報が含まれます。そのため、開発中はDebugビルドを使うのが一般的です。

Releaseビルドは、配布や本番利用を目的としたビルドです。不要なデバッグ情報が減り、最適化された状態でexeファイルが生成されます。ユーザーに配布するexeファイルを作成する場合は、基本的にReleaseビルドを使います。

Visual Studioでは、画面上部の構成を「Debug」から「Release」に切り替えてビルドするだけで、Release版のexeファイルを生成できます。

1-4. .NET Frameworkと.NETのexe作成方法の違い

C#のexeファイルを作成するときは、「.NET Framework」と「.NET」の違いも押さえておきましょう。

.NET Frameworkは、主にWindows向けの従来型の開発基盤です。古い業務アプリやWindowsフォームアプリ、WPFアプリで今も使われています。.NET Frameworkアプリを配布する場合、配布先PCに対象バージョンの.NET Frameworkがインストールされている必要があります。

一方、現在の.NETは、Windows、macOS、Linuxをサポートするクロスプラットフォームな開発基盤です。Microsoftの.NET公式サイトでも、.NETはWindows、macOS、Linuxでサポートされるフレームワークとして紹介されています。Microsoft

現在の.NETでは、発行時に「フレームワーク依存型」「自己完結型」「単一ファイル」などを選べます。そのため、C#のexeファイルを他のPCで動かしたい場合は、単にビルドするだけでなく、どの形式で発行するかを考えることが重要です。

1-5. exeファイル化に必要な開発環境

C#でexeファイルを作成するには、基本的に次のような開発環境が必要です。

Visual Studioを使う場合は、C#開発に対応したワークロードをインストールします。デスクトップアプリを作りたい場合は「.NET デスクトップ開発」を選ぶのが一般的です。Visual Studioは、Windowsの.NET開発向けの統合開発環境として提供されています。Visual Studio

Visual Studioを使わない場合は、.NET SDKとエディタを使ってC#アプリを作成できます。.NET SDKには、プロジェクトの作成、ビルド、実行、発行に必要なコマンドラインツールが含まれます。Microsoftは、.NETアプリをビルド・実行するためのSDKやランタイムを公式に配布しています。Microsoft

初心者の場合は、まずVisual Studioを使う方法がおすすめです。プロジェクト作成、ビルド、発行、デバッグを画面操作で行えるため、C#のexe作成の流れを理解しやすくなります。

2. Visual StudioでC#プロジェクトをexe化する基本手順

2-1. Visual StudioでC#プロジェクトを作成する

Visual StudioでC#のexeファイルを作成するには、まずC#プロジェクトを作成します。

Visual Studioを起動し、「新しいプロジェクトの作成」を選択します。次に、作成したいアプリの種類を選びます。文字だけの簡単なアプリを作りたい場合は「コンソール アプリ」、画面付きのWindowsアプリを作りたい場合は「Windows フォーム アプリ」や「WPF アプリ」を選びます。

プロジェクト名と保存場所を指定し、対象のフレームワークを選択します。現在の.NETを使う場合は、インストールされている.NETのバージョンを選びます。古い業務環境に合わせる場合は、.NET Frameworkを選ぶこともあります。

プロジェクトが作成されると、Visual Studio上でC#のソースコードを編集できるようになります。コンソールアプリであれば、最初からProgram.csが作成され、簡単なコードを実行できる状態になります。

2-2. コンソールアプリ・Windowsフォーム・WPFの違い

C#でexeを作成する場合、最初に選ぶプロジェクトの種類によって、完成するアプリの見た目や使い方が変わります。

コンソールアプリは、コマンドライン上で動作するアプリです。たとえば、CSVファイルを読み込んで変換するツール、定期処理、ログ出力ツール、学習用のサンプルプログラムなどに向いています。

Windowsフォームアプリは、ドラッグ&ドロップで画面部品を配置しながら作れるWindows向けのGUIアプリです。フォーム上にボタンや入力欄を配置し、クリックイベントにC#の処理を書いていきます。

WPFアプリは、XAMLを使って画面を定義するGUIアプリです。Windowsフォームよりも柔軟な画面設計が可能で、データバインディングやスタイル設定に強いのが特徴です。

どの形式でもexeファイルを作成できますが、初心者がC#のexe化を学ぶなら、まずはコンソールアプリで流れを理解し、その後WindowsフォームやWPFに進むと分かりやすいでしょう。

2-3. ビルドしてexeファイルを生成する

C#プロジェクトからexeファイルを生成するには、Visual Studioでビルドを実行します。

画面上部のメニューから「ビルド」→「ソリューションのビルド」を選択します。または、ショートカットキーのCtrl + Shift + Bでもビルドできます。

ビルドが成功すると、プロジェクトの出力フォルダーにexeファイルが生成されます。コンソールアプリであれば、プロジェクト名と同じ名前のexeファイルが作成されます。たとえば、プロジェクト名がSampleAppであれば、SampleApp.exeのようなファイルが生成されます。

ビルド時にエラーがある場合は、exeファイルは正しく生成されません。エラー一覧に表示される内容を確認し、構文ミス、参照エラー、型の不一致などを修正してから再度ビルドします。

2-4. 生成されたexeファイルの保存場所を確認する

Visual Studioでビルドしたexeファイルは、通常、プロジェクトフォルダー内のbinフォルダーに出力されます。

Debugビルドの場合は、次のような場所に生成されます。

プロジェクトフォルダー\bin\Debug\net8.0\SampleApp.exe

Releaseビルドの場合は、次のような場所に生成されます。

プロジェクトフォルダー\bin\Release\net8.0\SampleApp.exe

.NET Frameworkのプロジェクトでは、次のようなパスになることがあります。

プロジェクトフォルダー\bin\Release\SampleApp.exe

現在の.NETでは、対象フレームワーク名のフォルダーが間に入ることが一般的です。たとえば、net8.0net9.0net10.0のようなフォルダーです。

exeファイルの場所が分からない場合は、Visual Studioの「ソリューション エクスプローラー」でプロジェクトを右クリックし、「エクスプローラーでフォルダーを開く」を選ぶと確認しやすくなります。

2-5. Release版のexeファイルを作成する方法

配布用のexeファイルを作る場合は、Release版でビルドします。

Visual Studioの画面上部にある構成のドロップダウンから「Release」を選択します。通常は「Debug」と表示されている部分をクリックして「Release」に切り替えます。その後、「ビルド」→「ソリューションのビルド」を実行します。

Releaseビルドが成功すると、bin\Release配下にexeファイルが生成されます。

開発中の確認にはDebug、配布や本番利用にはReleaseと覚えておくとよいでしょう。特に、他のPCへ配布する場合は、Debugフォルダー内のexeではなく、Releaseフォルダー内のexe、または後述する「発行」機能で作成したファイルを使うのが基本です。

3. C#のexeファイルを実行する方法

3-1. Visual Studio上で実行する方法

C#アプリをVisual Studio上で実行するには、画面上部の「開始」ボタンをクリックします。ショートカットキーでは、デバッグ実行がF5、デバッグなし実行がCtrl + F5です。

F5で実行すると、ブレークポイントを使って処理を途中で止めたり、変数の中身を確認したりできます。開発中の動作確認には便利です。

Ctrl + F5で実行すると、デバッグなしでアプリが起動します。コンソールアプリの場合、処理終了後も画面がすぐに閉じないことがあるため、実行結果を確認しやすくなります。

Visual Studio上で正常に動くことを確認したら、次にexeファイルを直接実行して、Visual Studioがない環境でも動作するかを確認しましょう。

3-2. エクスプローラーからexeファイルを直接実行する方法

生成されたexeファイルは、エクスプローラーから直接実行できます。bin\Releaseや発行先フォルダーを開き、exeファイルをダブルクリックします。

WindowsフォームアプリやWPFアプリであれば、通常はアプリの画面が表示されます。コンソールアプリの場合は、黒い画面が表示され、処理が終わるとすぐ閉じることがあります。

コンソールアプリが一瞬で閉じてしまう場合は、プログラムの最後に次のようなコードを入れると、キー入力まで画面を閉じずに待機できます。

C#
Console.WriteLine("終了するには何かキーを押してください...");
Console.ReadKey();

ただし、配布用のツールでは、必ずしもこの処理が必要とは限りません。コマンドラインから実行する前提のアプリであれば、画面が閉じるのは正常な動作です。

3-3. コマンドプロンプトやPowerShellから実行する方法

C#で作成したexeファイルは、コマンドプロンプトやPowerShellからも実行できます。

まず、exeファイルがあるフォルダーに移動します。

PowerShell
cd C:\Users\ユーザー名\source\repos\SampleApp\bin\Release\net8.0

次に、exeファイルを実行します。

PowerShell
.\SampleApp.exe

コマンドライン引数を受け取るアプリの場合は、次のように引数を付けて実行できます。

PowerShell
.\SampleApp.exe input.csv output.csv

C#側では、Mainメソッドのargsから引数を受け取れます。

C#
static void Main(string[] args)
{
foreach (var arg in args)
{
Console.WriteLine(arg);
}
}

コマンドラインから実行できるようにしておくと、バッチファイルやタスクスケジューラから実行する自動化ツールとしても使いやすくなります。

3-4. exeファイル実行時に必要なランタイム

C#のexeファイルを実行するには、多くの場合、配布先PCに対象の.NETランタイムが必要です。.NET Frameworkアプリなら対象バージョンの.NET Framework、現在の.NETアプリなら対象バージョンの.NETランタイムが必要になります。

ただし、自己完結型で発行した場合は、アプリの実行に必要なランタイムを発行物に含めることができます。これにより、配布先PCに.NETランタイムが入っていなくても実行しやすくなります。

一方、フレームワーク依存型で発行した場合は、配布ファイルのサイズを小さくできますが、配布先PCに対応する.NETランタイムが必要です。Microsoft公式のdotnet publish説明でも、発行処理はアプリと依存関係を読み取り、実行に必要な一連のファイルをディレクトリへ出力するものと説明されています。Microsoft Learn

3-5. 他のPCで実行できない場合の原因

自分のPCではC#のexeが動くのに、他のPCでは動かないというケースはよくあります。主な原因は、必要な.NETランタイムが入っていない、dllファイルが不足している、設定ファイルが同梱されていない、32bit・64bitの環境が合っていない、外部ファイルのパスが間違っている、といったものです。

Visual Studio上で実行している場合、開発環境が自動的に必要なファイルや設定を補っていることがあります。しかし、配布先PCにはVisual Studioが入っていないことが多いため、発行フォルダー内の必要ファイル一式を正しくコピーする必要があります。

他のPCで確実に動かしたい場合は、Visual Studioの「発行」機能を使い、配布用フォルダーを作成するのがおすすめです。単にbin\Releaseのexeだけをコピーするよりも、必要な依存ファイルを含めやすくなります。

4. C#のexeファイルを配布用に発行する方法

4-1. ビルドと発行の違い

C#のexeファイル作成では、「ビルド」と「発行」の違いを理解しておく必要があります。

ビルドは、ソースコードをコンパイルして実行可能なファイルを作成する作業です。開発中の動作確認やテストでは、主にビルドを使います。

発行は、他のPCや本番環境で実行できるように、exeファイル、dll、設定ファイル、依存ファイルなどを配布用にまとめる作業です。Microsoft公式のチュートリアルでも、発行は他のユーザーがアプリを実行するために必要なファイル一式を作成する手順として説明されています。Microsoft Learn

つまり、開発中は「ビルド」、配布するときは「発行」と考えると分かりやすいです。

4-2. Visual Studioの「発行」機能を使う手順

Visual StudioでC#アプリを発行するには、ソリューション エクスプローラーでプロジェクトを右クリックし、「発行」を選択します。

発行先として「フォルダー」を選ぶと、ローカルPC上の指定したフォルダーに配布用ファイルを出力できます。社内ツールや個人用ツールを配布する場合は、この方法が分かりやすいでしょう。

発行設定では、配置モード、ターゲットランタイム、単一ファイルの有無などを選択できます。配置モードには、フレームワーク依存型と自己完結型があります。

発行ボタンをクリックすると、Visual Studioが配布に必要なファイルを指定フォルダーに出力します。配布するときは、そのフォルダー内のファイル一式をコピーするのが基本です。

4-3. フォルダーに発行して配布する方法

最も基本的な配布方法は、フォルダーに発行して、そのフォルダーごと配布する方法です。

Visual Studioの発行画面で「フォルダー」を選択し、発行先フォルダーを指定します。発行が完了すると、指定したフォルダー内にexeファイルやdllファイル、設定ファイルなどが出力されます。

このフォルダーをZIPファイルに圧縮し、配布先PCで展開してexeファイルを実行すれば、アプリを起動できます。

フォルダー配布のメリットは、仕組みが分かりやすく、トラブルが起きたときに必要ファイルを確認しやすいことです。デメリットは、ファイル数が多くなりやすく、ユーザーが誤ってdllや設定ファイルを削除すると動かなくなる可能性があることです。

4-4. 単一ファイルのexeとして発行する方法

C#のexeを配布するときに便利なのが、単一ファイルとして発行する方法です。単一ファイル発行を使うと、複数の依存ファイルを1つの実行ファイルにまとめやすくなります。

Visual Studioの発行設定で、ターゲットランタイムを指定し、「単一ファイルの生成」に相当する設定を有効にします。たとえば、Windows 64bit向けであれば、win-x64のようなランタイム識別子を指定します。

.NETでは、対象プラットフォームを識別するためにRIDという値が使われます。Microsoft公式ドキュメントでは、RIDの例としてlinux-x64win-x64osx-x64などが示されています。Microsoft Learn

単一ファイルは配布しやすい反面、アプリの種類や利用しているライブラリによっては、完全にexeファイル1つだけにならない場合もあります。外部の設定ファイル、画像、データベース、ネイティブdllなどが必要な場合は、それらを別途同梱する必要があります。

4-5. 自己完結型で.NETランタイム不要のexeを作成する方法

自己完結型とは、アプリの実行に必要な.NETランタイムを発行物に含める配布形式です。配布先PCに.NETランタイムがインストールされていなくても動かしやすいのが大きなメリットです。

Visual Studioの発行設定で、配置モードを「自己完結」にし、ターゲットランタイムを指定します。Windows 64bit向けならwin-x64、Windows 32bit向けならwin-x86、Windows ARM64向けならwin-arm64などを指定します。

自己完結型のメリットは、配布先PCの.NETランタイム環境に依存しにくいことです。デメリットは、発行物のファイルサイズが大きくなることです。ランタイムを含めるため、簡単なアプリでも配布サイズが大きくなる場合があります。

社内PCの環境が統一されていない場合や、ユーザーに.NETランタイムのインストールを依頼したくない場合は、自己完結型が便利です。

4-6. フレームワーク依存型で軽量なexeを作成する方法

フレームワーク依存型とは、配布先PCにインストールされている.NETランタイムを利用してアプリを実行する形式です。発行物に.NETランタイムを含めないため、ファイルサイズを小さくできます。

Visual Studioの発行設定で、配置モードを「フレームワーク依存」にします。この形式では、配布先PCに対象バージョンの.NETランタイムが必要です。

フレームワーク依存型のメリットは、配布ファイルが軽量で更新しやすいことです。デメリットは、配布先PCに必要なランタイムがないと起動できないことです。

社内で.NETランタイムのバージョンを管理できる場合や、配布サイズを小さくしたい場合は、フレームワーク依存型が適しています。

5. C#のexeファイル配布時に必要なファイルと注意点

5-1. exeファイルだけで動く場合と動かない場合

C#で作成したexeファイルは、条件によって「exeファイルだけで動く場合」と「exeファイルだけでは動かない場合」があります。

単純なコンソールアプリで、外部ライブラリや設定ファイルを使っておらず、配布先PCに必要な.NETランタイムが入っている場合は、exeファイルだけで動くことがあります。

しかし、NuGetパッケージ、独自dll、画像、CSV、JSON設定ファイル、データベースファイルなどを使っている場合は、exeファイル以外のファイルも必要です。また、自己完結型でない場合は、配布先PCに.NETランタイムが必要です。

配布時は「exeだけコピーする」のではなく、「発行されたフォルダー内のファイル一式をコピーする」と考えるのが安全です。

5-2. dllファイルや設定ファイルが必要になるケース

C#アプリで外部ライブラリを使っている場合、exeファイルと一緒にdllファイルが出力されることがあります。このdllファイルは、アプリが実行時に読み込む部品です。

たとえば、JSON処理、データベース接続、Excel操作、画像処理、ログ出力などのライブラリをNuGetで追加している場合、発行フォルダーに関連するdllが含まれることがあります。

これらのdllを削除したり、exeだけを別フォルダーに移動したりすると、起動時にエラーが発生する可能性があります。配布するときは、Visual Studioの発行機能で出力されたファイル構成を崩さないようにしましょう。

5-3. appsettings.jsonやconfigファイルの扱い

C#アプリでは、設定ファイルとしてappsettings.jsonApp.configweb.config、独自のJSONファイルなどを使うことがあります。

設定ファイルには、接続文字列、APIキー、ログ出力先、画面設定、処理条件などを記述することがあります。これらのファイルが発行フォルダーに含まれていないと、アプリが正しく動作しない場合があります。

Visual Studioでファイルのプロパティを確認し、「出力ディレクトリにコピー」が適切に設定されているか確認しましょう。必要に応じて「新しい場合はコピー」または「常にコピー」を選択します。

また、設定ファイルにパスワードや秘密情報を直接書く場合は注意が必要です。配布先のユーザーがファイルを開けるため、機密情報をそのまま含めない設計が望ましいです。

5-4. 画像・CSV・データベースなど外部ファイルの同梱方法

C#アプリで画像、CSV、SQLiteデータベース、テンプレートファイルなどを使う場合は、それらの外部ファイルも配布に含める必要があります。

プロジェクトにファイルを追加し、ファイルのプロパティで「出力ディレクトリにコピー」を設定すると、ビルド時や発行時に出力フォルダーへコピーできます。

たとえば、DataフォルダーにCSVを置き、Imagesフォルダーに画像を置く場合は、発行後も同じフォルダー構成で配布します。

ファイルパスをコードに書くときは、絶対パスではなく相対パスを使うのが基本です。たとえば、開発PCのC:\Users\YourName\Desktop\data.csvのようなパスを直接書くと、他のPCではほぼ確実に動きません。

実行ファイルの場所を基準にする場合は、次のように書けます。

C#
string baseDir = AppContext.BaseDirectory;
string filePath = Path.Combine(baseDir, "Data", "sample.csv");

このようにすると、exeファイルがあるフォルダーを基準にしてファイルを読み込めます。

5-5. 配布先PCのOSやCPUアーキテクチャの確認

C#のexeファイルを配布する前に、配布先PCのOSとCPUアーキテクチャを確認しましょう。

Windows向けに配布する場合でも、32bit、64bit、ARM64の違いがあります。自己完結型や単一ファイルで発行する場合は、ターゲットランタイムとしてwin-x64win-x86win-arm64などを指定します。

64bit Windowsが一般的ですが、古いPCや特殊な業務端末では32bit環境が残っている場合もあります。64bit向けに発行したexeは、32bit環境では動作しません。

迷う場合は、配布先PCの「システム情報」や「設定」からOSの種類を確認し、それに合わせた発行設定を選びましょう。

5-6. セキュリティ警告やウイルス誤検知への対応

自作のC# exeファイルを配布すると、Windowsのセキュリティ警告やウイルス対策ソフトの警告が表示されることがあります。特に、インターネットからダウンロードしたexeや、署名されていないexeは警告されやすくなります。

業務利用や外部配布を行う場合は、コード署名証明書を使ってexeに署名することを検討しましょう。コード署名を行うと、発行元を示しやすくなり、ユーザーにとっても安全性を判断しやすくなります。

また、exeファイルをZIPで配布する場合は、配布元、更新履歴、バージョン情報、問い合わせ先を明記すると安心です。

ウイルス誤検知が発生した場合は、ビルド環境を確認し、不審なライブラリが含まれていないか調べます。そのうえで、必要に応じてウイルス対策ソフトのベンダーに誤検知として報告します。

6. C#で作成したexeファイルをカスタマイズする方法

6-1. exeファイル名を変更する方法

C#で生成されるexeファイル名は、通常、プロジェクト名またはアセンブリ名に基づいて決まります。

Visual Studioでexeファイル名を変更したい場合は、プロジェクトのプロパティを開き、「アプリケーション」設定からアセンブリ名を変更します。SDK形式のプロジェクトでは、.csprojファイルに次のような設定を追加することもできます。

XML
<PropertyGroup>
<AssemblyName>MyTool</AssemblyName>
</PropertyGroup>

この設定を行うと、ビルド後にMyTool.exeのような名前で出力されます。

ただし、単に出力後のexeファイル名を手動で変更すると、関連ファイルとの整合性が崩れる場合があります。配布用に名前を変えたい場合は、プロジェクト設定で正式に変更するのがおすすめです。

6-2. アプリのアイコンを設定する方法

C#で作成したexeファイルには、独自のアイコンを設定できます。Windowsアプリとして配布する場合、アイコンを設定しておくと見た目が分かりやすくなります。

Visual Studioでプロジェクトのプロパティを開き、「アプリケーション」からアイコンファイルを指定します。アイコンには通常、.ico形式のファイルを使用します。

.png.jpg画像をそのまま指定できない場合は、アイコン作成ツールなどで.ico形式に変換します。

アイコンを設定したあとにビルドまたは発行すると、exeファイルに指定したアイコンが反映されます。反映されない場合は、エクスプローラーのアイコンキャッシュの影響で古いアイコンが表示されていることもあります。

6-3. バージョン情報や会社名を設定する方法

C#のexeファイルには、バージョン情報、製品名、会社名、著作権情報などを設定できます。

SDK形式のプロジェクトでは、.csprojに次のような情報を記述できます。

XML
<PropertyGroup>
<AssemblyTitle>SampleApp</AssemblyTitle>
<Company>Example Company</Company>
<Product>SampleApp</Product>
<Version>1.0.0</Version>
<FileVersion>1.0.0.0</FileVersion>
</PropertyGroup>

バージョン情報を設定しておくと、配布後の問い合わせ対応や更新管理がしやすくなります。

たとえば、ユーザーから「アプリが動かない」と連絡があった場合でも、exeのプロパティからバージョンを確認できれば、古い版を使っているのか、最新版で発生している問題なのかを判断しやすくなります。

6-4. コンソール画面を表示しないexeにする方法

WindowsフォームアプリやWPFアプリでは、通常、コンソール画面は表示されません。一方、コンソールアプリとして作成した場合は、起動時に黒いコンソール画面が表示されます。

コンソール画面を表示したくない場合は、プロジェクトの出力種類を「Windows アプリケーション」に変更します。

SDK形式のプロジェクトでは、.csprojで次のように設定します。

XML
<PropertyGroup>
<OutputType>WinExe</OutputType>
</PropertyGroup>

OutputTypeExeの場合はコンソールアプリ、WinExeの場合はWindowsアプリとして扱われます。

ただし、コンソール出力を使ってログやメッセージを表示しているアプリでWinExeに変更すると、出力内容が見えなくなります。コンソールを非表示にする場合は、ログファイルへ出力するなど、別の確認方法を用意しておきましょう。

6-5. 管理者権限で実行させる方法

C#で作成したexeを管理者権限で実行させたい場合は、アプリケーションマニフェストを設定します。

Visual Studioでマニフェストファイルを追加し、requestedExecutionLevelを次のように変更します。

XML
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

この設定を行うと、exe起動時にユーザーアカウント制御の確認画面が表示され、管理者権限で実行されます。

ただし、管理者権限は必要な場合だけ使うべきです。通常のファイル読み書きや画面操作だけであれば、管理者権限は不要です。管理者権限が必要になるのは、Program Files配下への書き込み、システム設定の変更、サービス操作などを行う場合です。

不要に管理者権限を要求すると、ユーザーに警戒される原因になります。まずは通常権限で動作する設計を検討しましょう。

7. C#のexe作成でよくあるエラーと解決策

7-1. exeファイルが生成されない場合

C#でビルドしてもexeファイルが生成されない場合は、まずビルドエラーがないか確認します。Visual Studioの「エラー一覧」を開き、赤いエラーが表示されていないか確認しましょう。

よくある原因は、コードの構文ミス、参照しているライブラリの不足、NuGetパッケージの復元失敗、プロジェクト設定の不備です。

また、プロジェクトの種類によっては、出力形式がライブラリになっている場合があります。.csprojOutputTypeLibraryになっていると、exeではなくdllが生成されます。実行ファイルを作成したい場合は、次のように設定します。

XML
<PropertyGroup>
<OutputType>Exe</OutputType>
</PropertyGroup>

Windowsアプリとしてコンソールを表示したくない場合は、WinExeを指定します。

7-2. exeを実行してもすぐ閉じる場合

コンソールアプリのexeをダブルクリックしてすぐ閉じる場合、プログラムが正常に終了しているだけの可能性があります。コンソールアプリは、処理が終わると画面が閉じます。

実行結果を確認したい場合は、コマンドプロンプトやPowerShellから実行しましょう。そうすれば、処理終了後も画面が残り、エラーメッセージや出力内容を確認できます。

開発中だけ画面を止めたい場合は、最後にConsole.ReadKey()を追加します。

C#
Console.WriteLine("処理が完了しました。");
Console.ReadKey();

ただし、自動実行されるバッチ処理では、キー入力待ちがあると処理が止まってしまいます。配布目的に応じて使い分けましょう。

7-3. 「必要なランタイムが見つかりません」と表示される場合

exe実行時に「必要なランタイムが見つかりません」と表示される場合は、配布先PCに対象の.NETランタイムが入っていない可能性があります。

フレームワーク依存型で発行したC#アプリは、配布先PCの.NETランタイムを利用して動作します。そのため、対象バージョンのランタイムがないと起動できません。

解決策は、配布先PCに必要な.NETランタイムをインストールするか、自己完結型で発行し直すことです。ユーザーにランタイムのインストールを依頼したくない場合は、自己完結型で配布する方法が向いています。

7-4. 他のPCでdll不足エラーが出る場合

他のPCでexeを実行したときにdll不足エラーが出る場合、必要なdllファイルを一緒に配布できていない可能性があります。

C#アプリでは、NuGetパッケージや外部ライブラリを使うと、exe以外にdllファイルが必要になることがあります。自分のPCではVisual Studioや開発環境に必要なファイルがあるため動いていても、配布先PCでは不足していることがあります。

解決策は、Visual Studioの発行機能を使って、出力されたフォルダーごと配布することです。exeファイルだけを抜き出して配布するのではなく、発行フォルダー内のファイル構成を維持しましょう。

7-5. 32bit・64bitの違いによる実行エラー

C#のexeファイルは、CPUアーキテクチャの違いによって実行エラーになることがあります。特に、ネイティブdllや外部ドライバを利用している場合は注意が必要です。

64bit専用のdllを32bitプロセスから読み込むことはできません。逆に、32bit専用のdllを64bitプロセスから読み込むこともできません。

Visual Studioのプロジェクト設定で、プラットフォームターゲットをAny CPUx86x64などから選択できます。外部ライブラリが32bit専用ならx86、64bit専用ならx64に合わせます。

自己完結型で発行する場合も、win-x86win-x64win-arm64など、配布先環境に合ったRIDを指定します。

7-6. 発行後にファイルパスが正しく動作しない場合

開発中は動いていたのに、発行後にファイルが見つからない場合は、ファイルパスの指定方法に問題がある可能性があります。

よくある失敗は、開発PC上の絶対パスをコードに直接書いているケースです。

C#
string path = @"C:\Users\YourName\Desktop\data.csv";

このようなパスは、他のPCでは存在しないためエラーになります。

配布用アプリでは、実行ファイルの場所を基準にした相対パスを使うのが基本です。

C#
string baseDir = AppContext.BaseDirectory;
string path = Path.Combine(baseDir, "data.csv");

また、単一ファイル発行では、実行時のファイル配置が通常のビルド時と異なることがあります。外部ファイルを使う場合は、単一ファイルに埋め込むのか、exeと同じフォルダーに置くのかを事前に決めておきましょう。

8. C#のexeファイル作成に関するよくある質問

8-1. C#のソースコードから直接exeを作成できる?

C#のソースコードからexeを作成するには、コンパイルが必要です。Visual Studioを使えば、ビルド操作によって自動的にコンパイルされ、exeファイルが生成されます。

コマンドラインで作成する場合は、.NET SDKを使ってビルドできます。

PowerShell
dotnet build -c Release

配布用に発行する場合は、次のように実行します。

PowerShell
dotnet publish -c Release

つまり、C#の.csファイルをそのままexeとして実行するのではなく、Visual Studioや.NET SDKでビルドまたは発行してexeを作成します。

8-2. Visual Studioなしでexeファイルを作成できる?

Visual Studioなしでも、.NET SDKがあればC#のexeファイルを作成できます。

たとえば、コマンドラインで次のようにプロジェクトを作成できます。

PowerShell
dotnet new console -n SampleApp
cd SampleApp
dotnet build -c Release

配布用に発行する場合は、次のようにします。

PowerShell
dotnet publish -c Release -r win-x64

Visual Studio Codeなどのエディタと.NET SDKを組み合わせて開発することも可能です。ただし、初心者の場合は、Visual Studioのほうがプロジェクト作成、デバッグ、発行を画面操作で行えるため分かりやすいでしょう。

8-3. exeファイルを1つだけ配布することはできる?

現在の.NETでは、単一ファイル発行を使うことで、C#アプリを1つのexeファイルにまとめて配布しやすくなっています。Microsoft公式ドキュメントでも、単一ファイル配置はアプリ依存ファイルを1つのバイナリにまとめる配布方法として説明されています。Microsoft Learn

ただし、必ず完全に1ファイルだけで済むとは限りません。設定ファイル、画像、CSV、データベース、ネイティブdllなどを外部ファイルとして扱う設計にしている場合は、それらを別途同梱する必要があります。

また、フレームワーク依存型の単一ファイルでは、配布先PCに.NETランタイムが必要です。ランタイム不要にしたい場合は、自己完結型の単一ファイルとして発行します。

8-4. C#で作ったexeはMacやLinuxでも動く?

Windows向けの.exeファイルは、基本的にWindowsで実行するためのファイルです。macOSやLinuxでそのままWindows用exeを実行できるとは考えないほうがよいでしょう。

ただし、現在の.NET自体はクロスプラットフォームに対応しており、Windows、macOS、Linux向けにアプリを作成できます。Microsoftの.NET公式サイトでも、.NETはLinux、Windows、macOSをサポートすると説明されています。Microsoft

macOSやLinuxで動かしたい場合は、それぞれの環境向けに発行します。たとえば、Linux 64bit向けならlinux-x64、macOS 64bit向けならosx-x64、Apple Silicon向けならosx-arm64などのRIDを指定します。

ただし、WindowsフォームやWPFはWindows向けのデスクトップ技術です。クロスプラットフォームでGUIアプリを作りたい場合は、別のUIフレームワークの検討が必要です。

8-5. exeファイルをインストーラー形式で配布できる?

C#で作成したexeファイルは、インストーラー形式で配布することもできます。

簡単な社内ツールであれば、発行フォルダーをZIPにして配布するだけでも十分な場合があります。一方、スタートメニューへの登録、デスクトップショートカットの作成、インストール先の指定、アンインストール機能などが必要な場合は、インストーラーを作成すると便利です。

Visual Studio Installer Projects、WiX Toolset、Inno Setupなどを使うと、C#アプリ用のインストーラーを作成できます。

インストーラー形式にする場合も、内部的にはexeファイル、dll、設定ファイルなどを適切な場所に配置する必要があります。まずは通常のフォルダー発行で正しく動くことを確認し、その後インストーラー化するのがおすすめです。

8-6. 作成したexeファイルを商用利用できる?

自分で作成したC#アプリのexeファイルは、基本的に商用利用できます。ただし、利用しているライブラリ、NuGetパッケージ、画像、フォント、データベース、APIなどのライセンスを確認する必要があります。

特に、外部ライブラリにはMIT、Apache License、GPL、商用ライセンスなど、さまざまなライセンスがあります。商用アプリに組み込んでよいか、著作権表示が必要か、ソースコード公開義務があるかを確認しましょう。

また、会社で作成したプログラムの場合は、著作権や配布権限が会社に帰属する場合があります。業務で作成したexeを個人で配布することは避け、所属先の規定を確認することが大切です。

まとめ

C#でexeファイルを作成するには、Visual Studioでプロジェクトを作成し、ビルドまたは発行を行います。開発中の確認であればDebugビルド、配布用であればReleaseビルドや発行機能を使うのが基本です。

単にexeファイルを作るだけなら、Visual Studioの「ビルド」だけでも可能です。しかし、他のPCで実行できる形にするには、ランタイム、dll、設定ファイル、外部ファイル、OS、CPUアーキテクチャなどを考慮する必要があります。

配布用には、Visual Studioの「発行」機能を使うのがおすすめです。フォルダー発行なら必要ファイル一式をまとめられます。単一ファイル発行を使えば、C#のexeを1つのファイルに近い形で配布できます。さらに、自己完結型で発行すれば、配布先PCに.NETランタイムが入っていなくても動かしやすくなります。

C#でexeを作成するときは、「ビルドすれば終わり」ではなく、「配布先で確実に動く状態にする」ことを意識しましょう。DebugとReleaseの違い、.NET Frameworkと.NETの違い、フレームワーク依存型と自己完結型の違いを理解しておけば、C#アプリのexe化や配布で発生するトラブルを大きく減らせます。