public CompileResult Compile() { var result = new CompileResult(); //var assemblyPath = Path.GetDirectoryName(typeof(object).GetTypeInfo().Assembly.Location); var assemblyName = Guid.NewGuid().ToString(); this.Source = CleanSource(this.Source); var syntaxTrees = CSharpSyntaxTree.ParseText(this.Source); // set up compilation var compilation = CSharpCompilation.Create(assemblyName) .WithOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)) .AddReferences(references) .AddSyntaxTrees(syntaxTrees); // build the assembly Assembly assembly = null; using (var stream = new MemoryStream()) { // this is broked... EmitResult compileResult = compilation.Emit(stream); // we get here, with diagnostic errors (check compileResult.Diagnostics) if (compileResult.Success) { stream.Position = 0; assembly = Accessor.LoadFromStream(stream, null); } else { result.IsValid = false; result.Errors = compileResult.Diagnostics.Select(d => d.ToString()); } } if (assembly != null) { // iterate over the types in the assembly var types = assembly.GetExportedTypes(); if (types.Length == 1) { _compiledType = types[0]; result.IsValid = true; } if (types.Length > 1) { result.IsValid = false; result.Errors = new[] { "We currently only support a single type through this website. Install GenFu in your own project to generate data for multiple types." }; } } _isCompiled = result.IsValid; return result; }