A Microsoft Research abriu o código fonte dos projetos Common Compiler Infrastructure: Metadata (CCI) e CCI: Código e AST contendo um conjunto de bibliotecas usadas por compiladores e outras ferramentas de programação para manipular metadados nas assemblies do CLR e para depurar arquivos. Os componentes dos metadados do CCI contém o System.Reflection enquanto que o código e o AST contém o System.CodeDom.
O CCI atualmente não carrega os assembly's que acessa, mas ele lê/grava seus metadados, e ele não abre um assembly de dependencia até que seja necessário. Quando trabalha com arquivos CLR PE, o CCI pode escrever neles qualqquer objeto que implementa as interfaces do modelo de metadados (Microsoft.Cci.MetadataModel).
A API CCI: Metadados contém:
- um modelo de Metadados
- um Leitor de CLR PE
- um Escritor de CLR PE
- uma classe que ajuda com os metadados (métodos estáticos no Microsoft.Cci.MetadataHelper.dll)
- implementação de classes para as interfaces de Modelo de Metadados
- um Modelo Fonte para trabalhar com os arquivos fontes
- um leitor de PDB
- um escritor de PDB
Os projetos CCI: Código e AST contêm:
- um Modelo de Código usado para ler expressões e declarações
- um Modelo de Código Mutável que representa um modelo de código modificado, pois o Modelo de Código oferece uma visão somente leitura do código
- um Modelo AST para extrair nós AST. “Os nós AST cuidam de coisas como vinculação de nomes as definições, resolução de sobrecarga e checagem de erros. Os componentes AST são desenhados para suportar compilação incremental, enquanto permite um eficiente projeção no modelo de código imutável.”
O projeto tem suporte pela RiSE, um time da Microsoft Research.