private void RunMosaCompiler(CompilerHelperSettings settings, string assemblyFile) { IAssemblyLoader assemblyLoader = new AssemblyLoader(); assemblyLoader.InitializePrivatePaths(settings.References); assemblyLoader.LoadModule(assemblyFile); foreach (string file in settings.References) { assemblyLoader.LoadModule(file); } typeSystem = new TypeSystem(); typeSystem.LoadModules(assemblyLoader.Modules); RunMosaCompiler(); }
private string RunCodeDomCompiler(CompilerHelperSettings settings) { Console.WriteLine("Executing {0} compiler...", settings.Language); CodeDomProvider provider; if (!providerCache.TryGetValue(settings.Language, out provider)) { provider = CodeDomProvider.CreateProvider(settings.Language); if (provider == null) { throw new NotSupportedException("The language '" + settings.Language + "' is not supported on this machine."); } providerCache.Add(settings.Language, provider); } string filename = Path.Combine(TempDirectory, Path.ChangeExtension(Path.GetRandomFileName(), "dll")); temps.AddFile(filename, false); string[] references = new string[settings.References.Count]; settings.References.CopyTo(references, 0); CompilerResults compileResults; CompilerParameters parameters = new CompilerParameters(references, filename, false); parameters.CompilerOptions = "/optimize-"; if (settings.UnsafeCode) { if (settings.Language == "C#") { parameters.CompilerOptions = parameters.CompilerOptions + " /unsafe+"; } else { throw new NotSupportedException(); } } if (settings.DoNotReferenceMscorlib) { if (settings.Language == "C#") { parameters.CompilerOptions = parameters.CompilerOptions + " /nostdlib"; } else { throw new NotSupportedException(); } } parameters.GenerateInMemory = false; if (settings.CodeSource != null) { //Console.WriteLine("Code: {0}", settings.CodeSource + settings.AdditionalSource); compileResults = provider.CompileAssemblyFromSource(parameters, settings.CodeSource + settings.AdditionalSource); } else { throw new NotSupportedException(); } if (compileResults.Errors.HasErrors) { StringBuilder sb = new StringBuilder(); sb.AppendLine("Code compile errors:"); foreach (CompilerError error in compileResults.Errors) { sb.AppendLine(error.ToString()); } throw new Exception(sb.ToString()); } return(compileResults.PathToAssembly); }