Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        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);
        }