public Type CompileView()
{
// generate code
GeneratorResults results;
using (var rdr = new StreamReader(ViewFile))
{
results = GenerateViewCode(rdr);
}
// Check for errors
if (!results.Success)
{
var x = new CompileException("Failed to parse/generate Razor View");
foreach (var e in results.ParserErrors)
{
x.AddError(ViewFile, e.Location.LineIndex + 1, e.Location.CharacterIndex + 1, e.Length, e.Message);
}
throw x;
}
// Compile the code dom
var compileParams = new CompilerParameters()
{
GenerateInMemory = true,
IncludeDebugInformation = true,
GenerateExecutable = false,
CompilerOptions = "/target:library /optimize"
};
// Add references to all currently loaded assemblies
foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
{
if (!a.IsDynamic)
compileParams.ReferencedAssemblies.Add(a.Location);
}
// Compile
var codeDom = (CodeDomProvider)Activator.CreateInstance(Language.CodeDomProviderType);
var compileResults = codeDom.CompileAssemblyFromDom(compileParams, results.GeneratedCode);
// Display compiler errors
if (compileResults.Errors != null && compileResults.Errors.Count > 0)
{
var x = new CompileException("Failed to compile Razor view");
foreach (CompilerError e in compileResults.Errors)
{
x.AddError(ViewFile, e.Line, e.Column, 0, e.ErrorText);
}
throw x;
}
return compileResults.CompiledAssembly.GetType("Manos.Mvc.GeneratedView");
}