微軟研究院已經(jīng)將“Common Compiler Infrastructure: Metadata (CCI)”和“CCI: Code and AST”兩個(gè)項(xiàng)目開源了,其中包含了一套讓編譯器或編程工具操作CLR程序集元數(shù)據(jù)和調(diào)試文件的類庫。CCI: Metadata組件擴(kuò)展了System.Reflection,而CCI: Code and AST擴(kuò)展了System.CodeDom。
CCI并不會(huì)加載它訪問的程序集,而是讀寫它們的元數(shù)據(jù),同時(shí)它也只會(huì)在必要時(shí)才會(huì)打開依賴的程序集。在操作CLR PE文件時(shí),CCI可以寫入任何實(shí)現(xiàn)了元數(shù)據(jù)模型接口(Microsoft.Cci.MetadataModel)的對(duì)象。
CCI: Metadata的API包括:
一個(gè)元數(shù)據(jù)模型一個(gè)CLR PE讀取器一個(gè)CLR PE寫入器一個(gè)元數(shù)據(jù)輔助類(Microsoft.Cci.MetadataHelper.dll中的靜態(tài)方法)元數(shù)據(jù)模型接口的實(shí)現(xiàn)類一個(gè)用于操作源文件的源代碼模型一個(gè)PDB讀取器一個(gè)PDB寫入器
CCI: Code and AST項(xiàng)目包括:
一個(gè)用于讀取語句和表達(dá)式的代碼模型一個(gè)可變的代碼模型,可表示經(jīng)過修改的代碼模型,因?yàn)槠胀ǖ拇a模型只是提供了代碼的只讀視圖一個(gè)用于提取AST節(jié)點(diǎn)的AST模型。“AST節(jié)點(diǎn)負(fù)責(zé)一些例如,綁定定義與名稱,分辨重載,錯(cuò)誤檢查這樣的事情。AST組件的設(shè)計(jì)目的是為了支持增量型編譯,同時(shí)允許對(duì)不可變的代碼模型進(jìn)行高效的修訂(projection)”