導入
ビルドするとbinフォルダに.exeや.dllというファイルが生まれます。この2つは何が違うのか——「単体で起動できる実行ファイル(exe)」と「部品として他から読み込まれるライブラリ(dll)」の区別を理解しましょう。
図解
flowchart LR
subgraph app["実行アプリ"]
EXE["MyApp.exe<br/>起点(エントリポイント)<br/>ダブルクリックで起動"]
end
subgraph lib["部品ライブラリ"]
DLL1["MyLibrary.dll<br/>単体では起動しない<br/>exeやdllから呼ばれる"]
end
EXE -->|参照して利用| DLL1
style EXE fill:#e1f5fe
style DLL1 fill:#fff3e0
詳細手順
- スターター
101-exe-dll/starter.zipを展開し、.slnをVisual Studioで開く。中には実行アプリ(OutputType=Exe)とクラスライブラリ(OutputType=Library)の2プロジェクトが入っている - ソリューションをビルドし、
bin/Debug/net10.0/を開く
MyApp.exeをダブルクリックすると起動する(単体で動く)ことを確認するMyLibrary.dllはダブルクリックしても起動しない(部品なので単体では動かない)ことを確認する
exe と dll の違い
| .exe(実行ファイル) | .dll(ダイナミックリンクライブラリ) | |
|---|---|---|
| 役割 | アプリの起点。起動できる | 部品。他から読み込まれる |
| エントリポイント | あり(Main/トップレベル文) | なし |
| 単体起動 | できる(ダブルクリック等) | できない |
csprojのOutputType | Exe | Library(既定) |
| 例 | MyApp.exe | Newtonsoft.Json.dll、自作の共通ロジック |
- 大きなアプリは「1つのexe+複数のdll」で構成される(機能ごとに部品を分ける)
- NuGetパッケージの実体も基本はdll。参照すると自分のアプリから呼べるようになる
- .NETのdll/exeはILを含むので、
dotnet MyApp.dllのようにランタイム経由でdllを直接実行することもできる
まとめ
- exeは起点(起動できる実行ファイル)、dllは部品(単体では起動しない)
- csprojの
OutputTypeがExeかLibraryかで決まる - アプリは「1つのexe+複数のdll」で構成されるのが普通
次回: プロジェクトの設計図csprojとNuGetです。
テンプレート構成(教材制作用メモ)
101-exe-dll/
└── starter.zip # 実行アプリ(Exe)+クラスライブラリ(Library)の2プロジェクト構成 / README