導入
ここまでのレッスンは、書いたコードをその場でコンパイルして実行していました。実務では「プロジェクトとしてまとめ、ビルドし、実行可能な成果物を作る」工程が挟まります。まずは仕組みを理解しましょう。
図解
flowchart LR
SRC["ソース *.cs"] --> COMP["C♯コンパイラ<br/>(Roslyn)"]
CSPROJ["*.csproj<br/>ビルド設定"] -.->|指示| COMP
COMP --> IL["中間言語 IL<br/>*.dll"] --> RT[".NETランタイム<br/>実行時にネイティブへ(JIT)"]
C#ソースは直接機械語にならず、まず**IL(中間言語)**へコンパイルされ、実行時にランタイムがネイティブ化します(JIT)。この仕組みにより、ビルドしたdllは.NETランタイムのある環境ならOSを問わず動きます。
詳細手順(dotnet CLI)
- スターター
99-build-compile/starter.zipを展開する - ターミナル(Visual Studioの「開発者コマンドプロンプト」でも可)で順に実行する:
dotnet new console -o MyApp # コンソールアプリの雛形を作成
cd MyApp
dotnet build # コンパイル → bin/Debug/ に dll/exe 生成
dotnet run # 必要ならビルドして実行 → Hello, World!
bin/(成果物)・obj/(中間ファイル)が生成されることを確認する。どちらもソースから再生成できるので.gitignoreで管理対象外にする
補足
- ILは
dotnet buildでbin/Debug/net10.0/に.dllとして出力される - 一度ビルドしたdllは、Windows/Mac/Linuxのどれでも.NETランタイムさえあれば動く(クロスプラットフォーム)
まとめ
- ソース→IL→ランタイムがJITでネイティブ化、という流れで実行される
dotnet new/build/runが基本コマンドbin/objはGit管理外
次回: 同じことをVisual Studioの画面から行い、デバッグ実行とリリースの違いを学びます。
テンプレート構成(教材制作用メモ)
99-build-compile/
└── starter.zip # README.md(手順再掲)/ 最小のコンソールアプリ