-
Notifications
You must be signed in to change notification settings - Fork 0
MS_DotNetCompiler
- 戻る(開発ツール)
.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
C# 及び VB.NET のフリーかつ OSS のコンパイラ・コード解析 API
字句解析 / セマンティック解析のための API
動的コンパイル及びコード排出(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を直接叩くのは、
単一ファイルを手早くコンパイルする場合などに限られる。
- C# コンパイラ (csc.exe) の使い方 - C# 入門
http://kaitei.net/csharp/csc/ - Visual Studio なんていらないよ - Paepoi
https://palepoli.skr.jp/tips/dotnet/csc.php
- csc.exe を使用したコマンド ラインからのビルド
https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/compiler-options/ - Visual Basic コマンドライン コンパイラ
https://learn.microsoft.com/ja-jp/dotnet/visual-basic/reference/command-line-compiler/
- コマンドラインコンパイラ csc.exe で C# コードをコンパイルする
https://qiita.com/yuki451/items/c9c6a2b79ce96ae0d252 - Visual Studio を使わずにコンパイルする方法(備忘録)
https://qiita.com/smzknt_ast/items/6a8a396a6a4b0dfe9bbc - Visual Studio ではなく、Windows 付属の csc.exe だけで C# 実行ファイルを作る
https://qiita.com/toshirot/items/dcf7809007730d835cfc
-
Roslyn - Wikipedia
https://ja.wikipedia.org/wiki/Roslyn -
次世代コンパイラー"Roslyn"概説 【正式版対応】 - Build Insider
https://www.buildinsider.net/enterprise/roslyn
- Roslyn は怖くない
https://qiita.com/kyonsy/items/ef658112614dba462e1f
- .NET Compiler Platform SDK (Roslyn API)
https://learn.microsoft.com/ja-jp/dotnet/csharp/roslyn-sdk/ - Roslyn アナライザーを使用したコード分析 - Visual Studio
https://learn.microsoft.com/ja-jp/visualstudio/code-quality/roslyn-analyzers-overview - ソース ジェネレーター
https://learn.microsoft.com/ja-jp/dotnet/csharp/roslyn-sdk/source-generators-overview
Tags: 移行, .NET開発, テスト, デバッグ, デプロイ, ツール類, CI
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。