編譯程式會處理您撰寫下列結構化規則的程式代碼,這些規則通常與人類讀取和了解程式代碼的方式不同。 對編譯程式所使用模型的基本瞭解,對於瞭解建置 Roslyn 型工具時所使用的 API 至關重要。
編譯程式管線功能區域
.NET 編譯程式平臺 SDK 會藉由提供鏡像傳統編譯程式管線的 API 層,將 C# 和 Visual Basic 編譯程式的程式代碼分析公開給身為取用者。
此管線的每個階段都是個別的元件。 首先,剖析階段將來源文字分詞,再剖析為遵循語言文法的語法。 其次,宣告階段會分析來源和匯入的元數據,以形成具名符號。 接下來,系結階段會比對程序代碼中的標識碼與符號。 最後,在發佈階段會產生一個程序集,其中包含編譯器所建構的所有資訊。
.NET 編譯程式平臺 SDK 會公開物件模型,以允許存取該階段的資訊。 剖析階段會公開語法樹狀結構、宣告階段公開階層式符號數據表、系結階段公開編譯程式語意分析的結果,而發出階段則是產生 IL 位元組代碼的 API。
每個編譯程式會將這些元件合併為單一端對端整體。
這些 API 與 Visual Studio 所使用的 API 相同。 例如,程式代碼大綱和格式化功能會使用語法樹狀結構、 對象瀏覽器和導覽功能使用符號數據表、重構和 移至定義 使用語意模型,而 編輯後繼續 會使用所有這些,包括發出 API。
API 層
.NET 編譯程式 SDK 包含數層 API:編譯程式 API、診斷 API、腳本 API 和工作區 API。
編譯程式 API
編譯程式層包含物件模型,這些模型會對應於編譯程式管線的每個階段所公開的資訊,無論是語法上還是語意上。 編譯程式層也包含編譯程式單一調用的固定快照集,包括元件參考、編譯程式選項和原始碼檔案。 有兩個不同的 API 代表 C# 語言和 Visual Basic 語言。 這兩個 API 在外觀上類似,但為了每個語言的高忠實度而量身打造。 此層與Visual Studio元件沒有相依性。
診斷應用程式介面 (API)
在分析過程中,編譯器可能會產生一套診斷結果,涵蓋從語法錯誤、語意錯誤、確定指派錯誤到各種警告和資訊性診斷。 編譯程式 API 層會透過可延伸的 API 公開診斷,讓使用者定義的分析器插入編譯程式。 它可讓使用者定義的診斷,例如 StyleCop 之類的工具所產生的診斷,與編譯程式定義的診斷一起產生。 以這種方式產生診斷的優點是可以自然地與 MSBuild 和 Visual Studio 等工具整合,而這些工具依靠診斷來提供根據原則停止建置、在編輯器中顯示即時波浪線與建議程式碼修正等功能。
腳本撰寫 API
裝載和腳本 API 建置在編譯程式層之上。 您可以使用腳本 API 來執行程式碼片段,並累積運行時執行環境。 C# 互動式 REPL (讀取-Evaluate-Print 循環) 會使用這些 API。 REPL 可讓您使用 C# 作為腳本語言,在撰寫程式代碼時以互動方式執行程序代碼。
工作區 API
工作區層包含工作區 API,這是在整個解決方案上執行程式代碼分析和重構的起點。 它可協助您將方案中專案的所有信息組織成單一物件模型,讓您直接存取編譯程序層物件模型,而不需要剖析檔案、設定選項或管理專案對專案相依性。
此外,工作區層會呈現一組 API,用於實作程式代碼分析和重構工具,以在像是 Visual Studio IDE 的主機環境中運作。 範例包括尋找所有參考、格式化和程式代碼產生 API。
此層與Visual Studio元件沒有相依性。