/// <summary> /// Compiles the type defined in the specified type context. /// </summary> /// <param name="context">The type context which defines the type to compile.</param> /// <returns>The compiled type.</returns> public override Type CompileType(TypeContext context) { var results = Compile(context); if (results.Errors != null && results.Errors.Count > 0) { Console.WriteLine(results.Errors.Dump()); throw new TemplateCompilationException(results.Errors); } return results.CompiledAssembly.GetType("CompiledRazorTemplates.Dynamic." + context.ClassName); }
/// <summary> /// Creates the compile results for the specified <see cref="TypeContext"/>. /// </summary> /// <param name="context">The type context.</param> /// <returns>The compiler results.</returns> private CompilerResults Compile(TypeContext context) { var compileUnit = GetCodeCompileUnit(context.ClassName, context.TemplateContent, context.Namespaces, context.TemplateType, context.ModelType); var @params = new CompilerParameters { GenerateInMemory = true, GenerateExecutable = false, IncludeDebugInformation = false, CompilerOptions = "/target:library /optimize" }; var assemblies = CompilerServices .GetLoadedAssemblies() .Where(a => !a.IsDynamic) .Select(a => a.Location) .ToArray(); @params.ReferencedAssemblies.AddRange(assemblies); return CodeDomProvider.CompileAssemblyFromDom(@params, compileUnit); }
/// <summary> /// Compiles the type defined in the specified type context. /// </summary> /// <param name="context">The type context which defines the type to compile.</param> /// <returns>The compiled type.</returns> public abstract Type CompileType(TypeContext context);