protected MergeTextTemplateEngine(Guid?verticalId, string mimeType, string text, MergeSettings settings) { _verticalId = verticalId; _mimeType = mimeType; _text = text; _settings = settings; }
private static Assembly CreateAssembly(string code, string mimeType, MergeSettings settings) { // Create an in-memory assembly from the source code. CompilerParameters parameters = new CompilerParameters(); parameters.GenerateExecutable = false; parameters.GenerateInMemory = true; parameters.IncludeDebugInformation = false; AddReferences(parameters, mimeType, settings); // Compile the code. CodeDomProvider provider = new CSharpCodeProvider(); CompilerResults results = provider.CompileAssemblyFromSource(parameters, code); // Look for errors. if (results.Errors.Count > 0) { throw new ApplicationException("Compile Error: " + results.Errors[0].ErrorText); } // Return the compiled assembly. return(results.CompiledAssembly); }
public static string Parse(string text, string mimeType, string method, TemplateProperties properties, MergeSettings settings) { using (var stream = new MemoryStream()) { using (var writer = new StreamWriter(stream, System.Text.Encoding.UTF8)) { WriteUsings(writer, mimeType, settings.Usings); // Class declaration. writer.Write(@" using System; namespace LinkMe.Utility.Templates.Generated { public class Engine { "); // Fields. WriteFields(writer, settings.Fields); // Methods. WriteMethods(writer, settings.Methods); // The actual merge method. writer.Write(@" public static string "); writer.Write(method); writer.Write("("); WriteParameters(writer, properties); writer.Write(@") { using (MemoryStream stream = new MemoryStream()) { using (StreamWriter writer = new StreamWriter(stream, System.Text.Encoding.UTF8)) { "); writer.Write(@" // Start of template. "); WriteText(writer, text, mimeType); writer.Write(@" // End of template. "); writer.Write(@" writer.Flush(); stream.Position = 0; using (StreamReader reader = new StreamReader(stream)) { return reader.ReadToEnd(); } } } } } }"); writer.Flush(); stream.Position = 0; using (var reader = new StreamReader(stream)) { return(reader.ReadToEnd()); } } } }
private static void AddReferences(CompilerParameters parameters, string mimeType, MergeSettings settings) { // Add standard references. parameters.ReferencedAssemblies.Add("mscorlib.dll"); parameters.ReferencedAssemblies.Add("System.dll"); parameters.ReferencedAssemblies.Add("System.Xml.dll"); if (mimeType == MediaTypeNames.Text.Html) { if (!settings.References.Contains("System.Web.dll")) { parameters.ReferencedAssemblies.Add("System.Web.dll"); } } // Add any aditional references that are needed. foreach (string reference in settings.References) { parameters.ReferencedAssemblies.Add(reference); } }
public static MethodInfo Compile(string code, string mimeType, string method, MergeSettings settings) { if (code == null) { throw new ArgumentNullException("code"); } if (method == null) { throw new ArgumentNullException("method"); } // Create the assembly and then find the method. Assembly assembly = CreateAssembly(code, mimeType, settings); return(GetMethodInfo(assembly, method)); }