Ejemplo n.º 1
0
        public static PreparedCompilation CreateCompilation(string assemblyName, IEnumerable <ISourceFile> sourceFiles, IEnumerable <IAssemblyReference> references, IList <string> defineConstants, IEnumerable <IAssemblyResource> resources)
        {
            IProjectContent project = new CSharpProjectContent().SetAssemblyName(assemblyName);

            var files = sourceFiles.Select(f => {
                using (var rdr = f.Open()) {
                    var syntaxTree   = CreateParser(defineConstants).Parse(rdr, f.Filename);
                    var expandResult = new QueryExpressionExpander().ExpandQueryExpressions(syntaxTree);
                    syntaxTree       = (expandResult != null ? (SyntaxTree)expandResult.AstNode : syntaxTree);
                    return(new ParsedSourceFile(syntaxTree, new CSharpUnresolvedFile {
                        FileName = f.Filename
                    }));
                }
            }).ToList();

            foreach (var f in files)
            {
                var tcv = new TypeSystemConvertVisitor(f.ParsedFile);
                f.SyntaxTree.AcceptVisitor(tcv);
                project = project.AddOrUpdateFiles(f.ParsedFile);
            }
            project = project.AddAssemblyReferences(references);
            if (resources != null)
            {
                var reslist = resources.ToList();
                if (reslist.Count > 0)
                {
                    project = project.AddResources(reslist);
                }
            }

            return(new PreparedCompilation(project.CreateCompilation(), files));
        }