知識マップ: Roslynとは何か ── C#コードをコンパイラの視点で読む・直す・生成する

記事「Roslynとは何か ── C#コードをコンパイラの視点で読む・直す・生成する」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

この記事は、C#/VBのコンパイラ基盤であるRoslynを、構文を表すSyntax Treeと意味を表すSemanticModelという2つのAPIを軸に整理した入門記事です。Compilationは複数のSyntax Treeと参照アセンブリからSemanticModelを解決するための材料をまとめ、Workspaceはソリューション・プロジェクト単位の操作をMSBuildWorkspaceなどの実装で提供します。この土台の上に、警告を出すAnalyzer、修正案を提示するCode Fix、コンパイル時にコードを追加するSource Generatorという3つの使い方が乗り、Analyzerの重大度は.editorconfigで構成でき、.NET 5以降で既定有効になる.NET SDK同梱Analyzerも同じ仕組みの上に成り立ちます。Source Generatorは複雑さゆえに、.NET Frameworkの既存資産への最初の導入手段としては推奨されません。

Roslyn(.NET Compiler Platform)の知識マップRoslynがSyntax Tree・SemanticModel・Workspaceという3つのAPIの上に成り立ち、そこからAnalyzer・Code Fix・Source Generatorという3つの使い方が枝分かれし、.editorconfigやMSBuildWorkspace、.NET SDK同梱Analyzerとどう関係するかを示す図です。利用する利用する利用する前提とする前提とする利用する実装を担う利用する利用するで構成できる前提とする利用する実装を担う利用するで構成できる利用する用いるのは非推奨利用する前提とするRoslyn(.NET Compiler Platform)Syntax TreeSemanticModelWorkspace(Roslyn)Compilation(Roslyn)Symbol(Roslyn)MSBuildWorkspaceAnalyzer(Roslyn).editorconfigCode Fix(Roslyn)Source Generator(Roslyn)IIncrementalGenerator.NET SDK同梱Analyzer.NET Framework.NET(Core以降)

概念間の関係(全19件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

Roslyn(.NET Compiler Platform)
C#とVisual Basicのコンパイラ実装であると同時に、コード解析ツールを作るためのAPI群でもある基盤。
Syntax Tree
ソースコードの構文構造を、クラス・メソッド・式・ステートメントなどのC#の構文要素として表すRoslynの木構造。
SemanticModel
構文木の各ノードが実際にどのシンボル(型・メソッドなど)に解決されたかなど、コードの意味をコンパイラの名前解決結果として取得できるRoslynのAPI。
MSBuildWorkspace
MSBuildを使ってソリューション・プロジェクトファイルを読み込む、RoslynのWorkspaceの実装。
Analyzer(Roslyn)
特定の構文やシンボルを検出し、Diagnostic(警告・エラー)としてコンパイラやIDEに報告する仕組み。
Code Fix(Roslyn)
Analyzerが検出した問題に対して、安全に適用できる修正案を提示する仕組み。
Source Generator(Roslyn)
コンパイル時に実行され、生成したC#コードを同じコンパイルに追加する仕組み。既存コードの書き換えではなく追加コードの生成を行う。
IIncrementalGenerator
変更差分を効率よく扱えるよう設計された、Source Generatorの実装インターフェイス。
.NET SDK同梱Analyzer
.NET 5以降のプロジェクトで既定で有効になる、.NET SDKに同梱されたコード分析機能。コード品質・信頼性・性能・セキュリティ(CAxxxx)とコードスタイル(IDExxxx)の診断を含む。
Workspace(Roslyn)
Solution・Project・Documentという単位で、単一ファイルではなくソリューションやプロジェクト全体のコードを扱うためのRoslynのAPI。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。