本文へスキップ
BecomeCoder

C#実践コース · 第3章 ビルド・ツールとプロジェクト基礎 · レッスン17

exeファイルとdllファイル(ローカル実施)

ローカル実施

導入

ビルドすると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

詳細手順

  1. スターター101-exe-dll/starter.zipを展開し、.slnをVisual Studioで開く。中には実行アプリOutputType=Exe)とクラスライブラリOutputType=Library)の2プロジェクトが入っている
  2. ソリューションをビルドし、bin/Debug/net10.0/を開く
エクスプローラーでbin/Debug/net10.0フォルダを開き、MyApp.exeとMyLibrary.dllが並んでいる様子
ビルド成果物フォルダ:.exe(実行ファイル)と .dll(ライブラリ)
  1. MyApp.exeをダブルクリックすると起動する(単体で動く)ことを確認する
  2. MyLibrary.dllはダブルクリックしても起動しない(部品なので単体では動かない)ことを確認する

exe と dll の違い

.exe(実行ファイル).dll(ダイナミックリンクライブラリ)
役割アプリの起点。起動できる部品。他から読み込まれる
エントリポイントあり(Main/トップレベル文)なし
単体起動できる(ダブルクリック等)できない
csprojのOutputTypeExeLibrary(既定)
MyApp.exeNewtonsoft.Json.dll、自作の共通ロジック
  • 大きなアプリは「1つのexe+複数のdll」で構成される(機能ごとに部品を分ける)
  • NuGetパッケージの実体も基本はdll。参照すると自分のアプリから呼べるようになる
  • .NETのdll/exeはILを含むので、dotnet MyApp.dllのようにランタイム経由でdllを直接実行することもできる

まとめ

  • exeは起点(起動できる実行ファイル)、dllは部品(単体では起動しない)
  • csprojのOutputTypeExeLibraryかで決まる
  • アプリは「1つのexe+複数のdll」で構成されるのが普通

次回: プロジェクトの設計図csprojとNuGetです。

テンプレート構成(教材制作用メモ)

101-exe-dll/
└── starter.zip   # 実行アプリ(Exe)+クラスライブラリ(Library)の2プロジェクト構成 / README