Skip to content

MS_DotNetCompiler

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

.NETコンパイラ

概要

.NET のコンパイラ(参考

補足(.NET のコンパイルは 2 段階): .NET のコンパイラを理解するには、
ビルド時と実行時で 2 回コンパイルされるという構造を押さえる必要がある。

C# / VB のソース
     │ ① 本ページが扱うコンパイラ(csc / vbc / Roslyn)
     ▼
CIL(共通中間言語)+ メタデータ = アセンブリ(*.dll / *.exe)
     │ ② 実行時に JIT(Just-In-Time)がネイティブ コードへ
     ▼
ネイティブ コード

① があるため言語が違っても同じ CIL になる(C# と VB.NET の相互運用)、
② があるため同じアセンブリが異なる CPU で動く.NET Coreのデプロイ の FDD)。

なお、②を事前に行う Native AOT / ReadyToRun という選択肢もある
(起動が速くなる代わりに柔軟性を失う)。

詳細

標準付属

csc.exe

vbc.exe

.NET Compiler Platform (Roslyn)

C# 及び VB.NET のフリーかつ OSS のコンパイラ・コード解析 API

コード解析及びリファクタリング

字句解析 / セマンティック解析のための API

共通中間言語 (CIL) 生成

動的コンパイル及びコード排出(System.Reflection.Emit)のための API

Visual Studio Code をイニシアティブの原動力に、
Roslyn や、TypeScriptをベースにして開発された。

補足(Roslyn が変えたこと): Roslyn の本質は
**「コンパイラをブラックボックスから API に変えた」**ことにある。

【従来】ソース ──[ csc.exe(中は見えない) ]──▶ アセンブリ

【Roslyn】ソース ──▶ 構文木 ──▶ セマンティック モデル ──▶ アセンブリ
                      ↑ この途中経過を外から触れる

これにより、次のものがコンパイラと同じ理解で作れるようになった。

機能
アナライザー コーディング規約違反の検出(ビルド時に警告)
コード修正(Code Fix) 電球アイコンからの自動修正
リファクタリング 名前変更、メソッド抽出
Source Generator ビルド時にコードを生成する(リフレクション代替)
エディタ機能 補完、定義へ移動(LSP 経由で VS Code でも)

Source Generator は近年特に重要で、
実行時のリフレクションをビルド時のコード生成に置き換えることで、
Native AOT やトリミングと両立できるようになる。
System.Text.Json のソース生成モードなどが代表例。

C# コンパイラー(mcs)(Mono

Xamarin の基盤となっている「Mono」に対応するコンパイラ

補足(最新化): Mono の C# コンパイラ(mcs)は役目を終えている
Mono 自体は .NET へ統合され(dotnet/runtime の一部)、
コンパイラは Roslyn に一本化された。
Xamarin も .NET MAUI に統合されている。

dotnet コマンドによるビルド(dotnetコマンド

.NET Core.NET Standard に対応するコンパイラ

補足: dotnet buildコンパイラそのものではなく
MSBuild を通じて Roslyn(csc)を呼び出す。
csc.exe を直接叩くのは、
単一ファイルを手早くコンパイルする場合などに限られる。

参考

標準付属

Microsoft Learn

Qiita

Roslyn

Qiita

Microsoft Learn


Tags: 移行, .NET開発, テスト, デバッグ, デプロイ, ツール類, CI

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally