public override Type GetCompiledType() { Type type = CachingCompiler.GetTypeFromCache(parser.PhysicalPath); if (type != null) { return(type); } if (parser.Program.Trim() == "") { type = Type.GetType(parser.ClassName, false); if (type == null) { type = parser.GetTypeFromBin(parser.ClassName); } CachingCompiler.InsertTypeFileDep(type, parser.PhysicalPath); return(type); } string lang = parser.Language; string compilerOptions; string tempdir; int warningLevel; CodeDomProvider provider; Provider = provider = CreateProvider(parser.Context, lang, out compilerOptions, out warningLevel, out tempdir); if (Provider == null) { throw new HttpException("Configuration error. Language not supported: " + lang, 500); } CompilerParameters compilerParameters; CompilerParameters = compilerParameters = CachingCompiler.GetOptions(parser.Assemblies); compilerParameters.IncludeDebugInformation = parser.Debug; compilerParameters.CompilerOptions = compilerOptions; compilerParameters.WarningLevel = warningLevel; bool keepFiles = (Environment.GetEnvironmentVariable("MONO_ASPNET_NODELETE") != null); TempFileCollection tempcoll; tempcoll = new TempFileCollection(tempdir, keepFiles); compilerParameters.TempFiles = tempcoll; inputFile = tempcoll.AddExtension(provider.FileExtension); Stream st = File.OpenWrite(inputFile); StreamWriter sw = new StreamWriter(st); sw.WriteLine(parser.Program); sw.Close(); string dllfilename = Path.GetFileName(tempcoll.AddExtension("dll", true)); compilerParameters.OutputAssembly = Path.Combine(DynamicDir(), dllfilename); CompilerResults results = CachingCompiler.Compile(this); CheckCompilerErrors(results); Assembly assembly = results.CompiledAssembly; if (assembly == null) { if (!File.Exists(compilerParameters.OutputAssembly)) { throw new CompilationException(inputFile, results.Errors, "No assembly returned after compilation!?"); } assembly = Assembly.LoadFrom(compilerParameters.OutputAssembly); } results.TempFiles.Delete(); type = assembly.GetType(parser.ClassName, true); CachingCompiler.InsertTypeFileDep(type, parser.PhysicalPath); return(type); }