static void LogErrors(TemplateGenerator generator) { foreach (System.CodeDom.Compiler.CompilerError err in generator.Errors) { var oldColor = Console.ForegroundColor; Console.ForegroundColor = err.IsWarning? ConsoleColor.Yellow : ConsoleColor.Red; if (!string.IsNullOrEmpty(err.FileName)) { Console.Error.Write(err.FileName); } if (err.Line > 0) { Console.Error.Write("("); Console.Error.Write(err.Line); if (err.Column > 0) { Console.Error.Write(","); Console.Error.Write(err.Column); } Console.Error.Write(")"); } if (!string.IsNullOrEmpty(err.FileName) || err.Line > 0) { Console.Error.Write(": "); } Console.Error.Write(err.IsWarning ? "WARNING: " : "ERROR: "); Console.Error.WriteLine(err.ErrorText); Console.ForegroundColor = oldColor; } }
static bool AddDirectiveProcessors(TemplateGenerator generator, List <string> directives) { foreach (var dir in directives) { var split = dir.Split('!'); if (split.Length != 3) { Console.Error.WriteLine("Directive must have 3 values: {0}", dir); return(false); } for (int i = 0; i < 3; i++) { string s = split [i]; if (string.IsNullOrEmpty(s)) { string kind = i == 0 ? "name" : (i == 1 ? "class" : "assembly"); Console.Error.WriteLine("Directive has missing {0} value: {1}", kind, dir); return(false); } } generator.AddDirectiveProcessor(split [0], split [1], split [2]); } return(true); }
public static int Main(string[] args) { if (args.Length == 0) { ShowHelp (true); } TemplateGenerator generator = new TemplateGenerator (); string outputFile = null, inputFile = null; optionSet = new OptionSet () { { "o=|out=", "The name of the output {file}", s => outputFile = s }, { "r=", "Assemblies to reference", s => generator.Refs.Add (s) }, { "u=", "Namespaces to import <{0:namespace}>", s => generator.Imports.Add (s) }, { "I=", "Paths to search for included files", s => generator.IncludePaths.Add (s) }, { "P=", "Paths to search for referenced assemblies", s => generator.ReferencePaths.Add (s) }, { "dp=", "Directive processor (name!class!assembly)", s => generator.DirectiveProcessors.Add (s) }, { "a=", "Key value pairs for directive processors (key:value)", s => { var parts = s.Split (new char [] { ':' }, 2); if (parts == null || parts.Length < 2) { throw new OptionException ("directive processor key value pairs must be specified as -a=key:value", "a"); } generator.ProcessorValues[parts[0]] = parts[1]; } }, { "h|?|help", "Show help", s => ShowHelp (false) } }; List<string> remainingArgs = optionSet.Parse (args); if (String.IsNullOrEmpty (outputFile)) { Console.WriteLine ("No output file specified."); return -1; } if (remainingArgs.Count < 1) { Console.WriteLine ("No input file specified."); return -1; } inputFile = remainingArgs [0]; if (!File.Exists (inputFile)) { Console.WriteLine ("Input file '{0}' does not exist.", inputFile); return -1; } System.Console.Write("Processing '{0}'... ", inputFile); generator.ProcessTemplate (inputFile, outputFile); if (generator.Errors.HasErrors) { System.Console.WriteLine("failed."); } else { System.Console.WriteLine("completed successfully."); } foreach (System.CodeDom.Compiler.CompilerError err in generator.Errors) Console.WriteLine ("{0}({1},{2}): {3} {4}", err.FileName, err.Line, err.Column, err.IsWarning? "WARNING" : "ERROR", err.ErrorText); return generator.Errors.HasErrors? -1 : 0; }
public void ProcessT4File(string inputFile, string outputFile) { var templateGenerator = new TemplateGenerator(); templateGenerator.ProcessTemplate(inputFile, outputFile); foreach (CompilerError item in templateGenerator.Errors) { errors.Add(item.ErrorText + ": " + item.FileName + " at line: " + item.Line); } }
/// <summary> /// /// </summary> /// <param name="args"></param> /// <returns></returns> private static int Main(string[] args) { TemplateResults results = new TemplateResults(); if (args.Length == 0) { ShowHelp(); results.wasSuccssful = false; } else if (args[0] == HELP_ARG) { ShowHelp(); results.wasSuccssful = true; } else if (args.Length < 2) { ShowHelp(); results.wasSuccssful = false; } else { string input = args.First(); string output = args.Last(); results.inputPath = input; results.outputPath = output; // Create our generator TemplateGenerator geneator = new TemplateGenerator(); // run it geneator.ProcessTemplate(input, output); if (geneator.Errors.HasErrors) { foreach (CompilerError error in geneator.Errors) { results.compileErrors.Add(error); } results.wasSuccssful = false; } else { results.wasSuccssful = true; } } // Write our output string outputJson = JSONWriter.ToJson(results); // Write it out Console.WriteLine(outputJson); return(results.wasSuccssful ? 0 : 1); }
static void Generate (TemplateGenerator host, ProjectFile file, out string outputFile) { outputFile = null; string content; try { content = File.ReadAllText (file.FilePath); } catch (IOException ex) { host.Errors.Add (new CompilerError { ErrorText = GettextCatalog.GetString ("Could not read input file '{0}':\n{1}", file.FilePath, ex) }); return; } var pt = ParsedTemplate.FromText (content, host); if (pt.Errors.HasErrors) { host.Errors.AddRange (pt.Errors); return; } var settings = TemplatingEngine.GetSettings (host, pt); if (pt.Errors.HasErrors) { host.Errors.AddRange (pt.Errors); return; } outputFile = file.FilePath.ChangeExtension (settings.Provider.FileExtension); settings.Name = settings.Provider.CreateValidIdentifier (file.FilePath.FileNameWithoutExtension); settings.Namespace = CustomToolService.GetFileNamespace (file, outputFile); settings.IncludePreprocessingHelpers = string.IsNullOrEmpty (settings.Inherits); settings.IsPreprocessed = true; var ccu = TemplatingEngine.GenerateCompileUnit (host, content, pt, settings); host.Errors.AddRange (pt.Errors); if (pt.Errors.HasErrors) { return; } try { using (var writer = new StreamWriter (outputFile, false, System.Text.Encoding.UTF8)) { settings.Provider.GenerateCodeFromCompileUnit (ccu, writer, new CodeGeneratorOptions ()); } } catch (IOException ex) { host.Errors.Add (new CompilerError { ErrorText = GettextCatalog.GetString ("Could not write output file '{0}':\n{1}", outputFile, ex) }); } }
private static void Stub(FileSystemInfo source, FileSystemInfo destination) { if (source.FullName.EndsWith(".spark")) { // At this time the destination is already copied and processed by // 'simple' text substitution, so destination should be processed. var settings = new SparkSettings(); settings.AddNamespace("System"); var engine = new SparkViewEngine(settings) {DefaultPageBaseType = typeof(Template).FullName}; var folder = new InMemoryViewFolder {{source.Name, File.ReadAllText(destination.FullName)}}; engine.ViewFolder = folder; var descriptor = new SparkViewDescriptor(); descriptor.AddTemplate(source.Name); var view = (Template) engine.CreateInstance(descriptor); var builder = new StringBuilder(); using (var output = new StringWriter(builder)) { view.RenderView(output); File.WriteAllText(destination.FullName, output.ToString()); } engine.ReleaseInstance(view); } else if (source.FullName.EndsWith(".tt")) { var generator = new TemplateGenerator(); if (!generator.ProcessTemplate(source.FullName, destination.FullName)) { var exception = new TemplateException(source.FullName); foreach (CompilerError error in generator.Errors) { exception.AddError(error.ErrorText); } throw exception; } } }
private static int MainInternal (string[] args) { if (args.Length == 0) { ShowHelp (true); } var generator = new TemplateGenerator (); string outputFile = null, inputFile = null; var directives = new List<string> (); var parameters = new List<string> (); // var session = new Microsoft.VisualStudio.TextTemplating.TextTemplatingSession (); string preprocess = null; optionSet = new OptionSet () { { "o=|out=", "The name of the output {file}", s => outputFile = s }, { "r=", "Assemblies to reference", s => generator.Refs.Add (s) }, { "u=", "Namespaces to import <{0:namespace}>", s => generator.Imports.Add (s) }, { "I=", "Paths to search for included files", s => generator.IncludePaths.Add (s) }, { "P=", "Paths to search for referenced assemblies", s => generator.ReferencePaths.Add (s) }, { "dp=", "Directive processor (name!class!assembly)", s => directives.Add (s) }, { "a=", "Parameters ([processorName]![directiveName]!name!value)", s => parameters.Add (s) }, { "h|?|help", "Show help", s => ShowHelp (false) }, // { "k=,", "Session {key},{value} pairs", (s, t) => session.Add (s, t) }, { "c=", "Preprocess the template into {0:class}", (s) => preprocess = s }, }; var remainingArgs = optionSet.Parse (args); if (remainingArgs.Count != 1) { Console.Error.WriteLine ("No input file specified."); return -1; } inputFile = remainingArgs [0]; if (!File.Exists (inputFile)) { Console.Error.WriteLine ("Input file '{0}' does not exist."); return -1; } if (string.IsNullOrEmpty (outputFile)) { outputFile = inputFile; if (Path.HasExtension (outputFile)) { var dir = Path.GetDirectoryName (outputFile); var fn = Path.GetFileNameWithoutExtension (outputFile); outputFile = Path.Combine (dir, fn + ".txt"); } else { outputFile = outputFile + ".txt"; } } //FIXME: implement quoting and escaping for values foreach (var par in parameters) { var split = par.Split ('!'); if (split.Length < 2) { Console.Error.WriteLine ("Parameter does not have enough values: {0}", par); return -1; } if (split.Length > 2) { Console.Error.WriteLine ("Parameter has too many values: {0}", par); return -1; } string name = split[split.Length-2]; string val = split[split.Length-1]; if (string.IsNullOrEmpty (name)) { Console.Error.WriteLine ("Parameter has no name: {0}", par); return -1; } generator.AddParameter (split.Length > 3? split[0] : null, split.Length > 2? split[split.Length-3] : null, name, val); } foreach (var dir in directives) { var split = dir.Split ('!'); if (split.Length != 3) { Console.Error.WriteLine ("Directive does not have correct number of values: {0}", dir); return -1; } foreach (var s in split) { if (string.IsNullOrEmpty (s)) { Console.Error.WriteLine ("Directive has missing value: {0}", dir); return -1; } } generator.AddDirectiveProcessor (split[0], split[1], split[2]); } if (preprocess == null) { generator.ProcessTemplate (inputFile, outputFile); if (generator.Errors.HasErrors) { Console.WriteLine ("Processing '{0}' failed.", inputFile); } } else { string className = preprocess; string classNamespace = null; int s = preprocess.LastIndexOf ('.'); if (s > 0) { classNamespace = preprocess.Substring (0, s); className = preprocess.Substring (s + 1); } string language; string[] references; generator.PreprocessTemplate (inputFile, className, classNamespace, outputFile, System.Text.Encoding.UTF8, out language, out references); if (generator.Errors.HasErrors) { Console.Write ("Preprocessing '{0}' into class '{1}.{2}' failed.", inputFile, classNamespace, className); } } foreach (System.CodeDom.Compiler.CompilerError err in generator.Errors) Console.Error.WriteLine ("{0}({1},{2}): {3} {4}", err.FileName, err.Line, err.Column, err.IsWarning? "WARNING" : "ERROR", err.ErrorText); return generator.Errors.HasErrors? -1 : 0; }
static int MainInternal(string[] args) { if (args.Length == 0) { ShowHelp(true); } var generator = new TemplateGenerator(); string outputFile = null, inputFile = null; var directives = new List <string> (); var parameters = new List <string> (); string preprocess = null; optionSet = new OptionSet() { { "o=|out=", "The name of the output {file}", s => outputFile = s }, { "r=", "Assemblies to reference", s => generator.Refs.Add(s) }, { "u=", "Namespaces to import <{0:namespace}>", s => generator.Imports.Add(s) }, { "I=", "Paths to search for included files", s => generator.IncludePaths.Add(s) }, { "P=", "Paths to search for referenced assemblies", s => generator.ReferencePaths.Add(s) }, { "dp=", "Directive processor (name!class!assembly)", s => directives.Add(s) }, { "a=", "Parameters (name=value) or ([processorName!][directiveName!]name!value)", s => parameters.Add(s) }, #if NET5 { "roslyn", "Use Roslyn", s => generator.UseInProcessCompiler() }, #endif { "h|?|help", "Show help", s => ShowHelp(false) }, // { "k=,", "Session {key},{value} pairs", (s, t) => session.Add (s, t) }, { "c=", "Preprocess the template into {0:class}", (s) => preprocess = s }, }; var remainingArgs = optionSet.Parse(args); if (remainingArgs.Count != 1) { Console.Error.WriteLine("No input file specified."); return(-1); } inputFile = remainingArgs [0]; if (!File.Exists(inputFile)) { Console.Error.WriteLine("Input file '{0}' does not exist.", inputFile); return(-1); } if (string.IsNullOrEmpty(outputFile)) { outputFile = inputFile; if (Path.HasExtension(outputFile)) { var dir = Path.GetDirectoryName(outputFile); var fn = Path.GetFileNameWithoutExtension(outputFile); outputFile = Path.Combine(dir, fn + ".txt"); } else { outputFile = outputFile + ".txt"; } } foreach (var par in parameters) { if (!generator.TryAddParameter(par)) { Console.Error.WriteLine("Parameter has incorrect format: {0}", par); return(-1); } } foreach (var dir in directives) { var split = dir.Split('!'); if (split.Length != 3) { Console.Error.WriteLine("Directive must have 3 values: {0}", dir); return(-1); } for (int i = 0; i < 3; i++) { string s = split [i]; if (string.IsNullOrEmpty(s)) { string kind = i == 0? "name" : (i == 1 ? "class" : "assembly"); Console.Error.WriteLine("Directive has missing {0} value: {1}", kind, dir); return(-1); } } generator.AddDirectiveProcessor(split[0], split[1], split[2]); } if (preprocess == null) { generator.ProcessTemplate(inputFile, outputFile); if (generator.Errors.HasErrors) { Console.WriteLine("Processing '{0}' failed.", inputFile); } } else { string className = preprocess; string classNamespace = null; int s = preprocess.LastIndexOf('.'); if (s > 0) { classNamespace = preprocess.Substring(0, s); className = preprocess.Substring(s + 1); } generator.PreprocessTemplate(inputFile, className, classNamespace, outputFile, new System.Text.UTF8Encoding(encoderShouldEmitUTF8Identifier: false), out string language, out string[] references); if (generator.Errors.HasErrors) { Console.Write("Preprocessing '{0}' into class '{1}.{2}' failed.", inputFile, classNamespace, className); } } foreach (TemplateError err in generator.Errors) { Console.Error.WriteLine("{0}({1},{2}): {3} {4}", err.Location.FileName, err.Location.Line, err.Location.Column, err.IsWarning ? "WARNING" : "ERROR", err.Message); } return(generator.Errors.HasErrors? -1 : 0); }
public static int Main(string[] args) { if (args.Length == 0) { ShowHelp(true); } var generator = new TemplateGenerator(); string outputFile = null, inputFile = null; var directives = new List <string> (); var parameters = new List <string> (); var session = new Microsoft.VisualStudio.TextTemplating.TextTemplatingSession(); string preprocess = null; optionSet = new OptionSet() { { "o=|out=", "The name of the output {file}", s => outputFile = s }, { "r=", "Assemblies to reference", s => generator.Refs.Add(s) }, { "u=", "Namespaces to import <{0:namespace}>", s => generator.Imports.Add(s) }, { "I=", "Paths to search for included files", s => generator.IncludePaths.Add(s) }, { "P=", "Paths to search for referenced assemblies", s => generator.ReferencePaths.Add(s) }, { "dp=", "Directive processor (name!class!assembly)", s => directives.Add(s) }, { "a=", "Parameters ([processorName]![directiveName]!name!value)", s => parameters.Add(s) }, { "h|?|help", "Show help", s => ShowHelp(false) }, // { "k=,", "Session {key},{value} pairs", (s, t) => session.Add (s, t) }, { "c=", "Preprocess the template into {0:class}", (s) => preprocess = s }, }; var remainingArgs = optionSet.Parse(args); if (string.IsNullOrEmpty(outputFile)) { Console.Error.WriteLine("No output file specified."); return(-1); } if (remainingArgs.Count != 1) { Console.Error.WriteLine("No input file specified."); return(-1); } inputFile = remainingArgs [0]; if (!File.Exists(inputFile)) { Console.Error.WriteLine("Input file '{0}' does not exist."); return(-1); } //FIXME: implement quoting and escaping for values foreach (var par in parameters) { var split = par.Split('!'); if (split.Length < 2) { Console.Error.WriteLine("Parameter does not have enough values: {0}", par); return(-1); } if (split.Length > 2) { Console.Error.WriteLine("Parameter has too many values: {0}", par); return(-1); } string name = split[split.Length - 2]; string val = split[split.Length - 1]; if (string.IsNullOrEmpty(name)) { Console.Error.WriteLine("Parameter has no name: {0}", par); return(-1); } generator.AddParameter(split.Length > 3? split[0] : null, split.Length > 2? split[split.Length - 3] : null, name, val); } foreach (var dir in directives) { var split = dir.Split('!'); if (split.Length != 3) { Console.Error.WriteLine("Directive does not have correct number of values: {0}", dir); return(-1); } foreach (var s in split) { if (string.IsNullOrEmpty(s)) { Console.Error.WriteLine("Directive has missing value: {0}", dir); return(-1); } } generator.AddDirectiveProcessor(split[0], split[1], split[2]); } if (preprocess == null) { Console.Write("Processing '{0}'... ", inputFile); generator.ProcessTemplate(inputFile, outputFile); if (generator.Errors.HasErrors) { Console.WriteLine("failed."); } else { Console.WriteLine("completed successfully."); } } else { string className = preprocess; string classNamespace = null; int s = preprocess.LastIndexOf('.'); if (s > 0) { classNamespace = preprocess.Substring(0, s); className = preprocess.Substring(s + 1); } Console.Write("Preprocessing '{0}' into class '{1}.{2}'... ", inputFile, classNamespace, className); string language; string[] references; generator.PreprocessTemplate(inputFile, className, classNamespace, outputFile, System.Text.Encoding.UTF8, out language, out references); if (generator.Errors.HasErrors) { Console.WriteLine("failed."); } else { Console.WriteLine("completed successfully:"); Console.WriteLine(" Language: {0}", language); if (references != null && references.Length > 0) { Console.WriteLine(" References:"); foreach (string r in references) { Console.WriteLine(" {0}", r); } } } } foreach (System.CodeDom.Compiler.CompilerError err in generator.Errors) { Console.Error.WriteLine("{0}({1},{2}): {3} {4}", err.FileName, err.Line, err.Column, err.IsWarning? "WARNING" : "ERROR", err.ErrorText); } return(generator.Errors.HasErrors? -1 : 0); }
public static int Main(string[] args) { if (args.Length == 0) { ShowHelp(true); } TemplateGenerator generator = new TemplateGenerator(); string outputFile = null, inputFile = null; optionSet = new OptionSet() { { "o=|out=", "The name of the output {file}", s => outputFile = s }, { "r=", "Assemblies to reference", s => generator.Refs.Add(s) }, { "u=", "Namespaces to import <{0:namespace}>", s => generator.Imports.Add(s) }, { "I=", "Paths to search for included files", s => generator.IncludePaths.Add(s) }, { "P=", "Paths to search for referenced assemblies", s => generator.ReferencePaths.Add(s) }, { "dp=", "Directive processor name!class!assembly", s => generator.DirectiveProcessors.Add(s) }, { "a=", "Key value pairs for directive processors", (s, p) => generator.ProcessorValues[s] = p }, { "h|?|help", "Show help", s => ShowHelp(false) } }; List <string> remainingArgs = optionSet.Parse(args); if (String.IsNullOrEmpty(outputFile)) { Console.WriteLine("No output file specified."); return(-1); } if (remainingArgs.Count != 1) { Console.WriteLine("No input file specified."); return(-1); } inputFile = remainingArgs [0]; if (!File.Exists(inputFile)) { Console.WriteLine("Input file '{0}' does not exist."); return(-1); } System.Console.Write("Processing '{0}'... ", inputFile); generator.ProcessTemplate(inputFile, outputFile); if (generator.Errors.HasErrors) { System.Console.WriteLine("failed."); } else { System.Console.WriteLine("completed successfully."); } foreach (System.CodeDom.Compiler.CompilerError err in generator.Errors) { Console.WriteLine("{0}({1},{2}): {3} {4}", err.FileName, err.Line, err.Column, err.IsWarning? "WARNING" : "ERROR", err.ErrorText); } return(generator.Errors.HasErrors? -1 : 0); }
public static int Main (string[] args) { if (args.Length == 0) { ShowHelp (true); } var generator = new TemplateGenerator (); string outputFile = null, inputFile = null; var directives = new List<string> (); var parameters = new List<string> (); optionSet = new OptionSet () { { "o=|out=", "The name of the output {file}", s => outputFile = s }, { "r=", "Assemblies to reference", s => generator.Refs.Add (s) }, { "u=", "Namespaces to import <{0:namespace}>", s => generator.Imports.Add (s) }, { "I=", "Paths to search for included files", s => generator.IncludePaths.Add (s) }, { "P=", "Paths to search for referenced assemblies", s => generator.ReferencePaths.Add (s) }, { "dp=", "Directive processor (name!class!assembly)", s => directives.Add (s) }, { "a=", "Parameters ([processorName]![directiveName]!name!value)", s => parameters.Add (s) }, { "h|?|help", "Show help", s => ShowHelp (false) } }; var remainingArgs = optionSet.Parse (args); if (string.IsNullOrEmpty (outputFile)) { Console.Error.WriteLine ("No output file specified."); return -1; } if (remainingArgs.Count != 1) { Console.Error.WriteLine ("No input file specified."); return -1; } inputFile = remainingArgs [0]; if (!File.Exists (inputFile)) { Console.Error.WriteLine ("Input file '{0}' does not exist."); return -1; } //FIXME: implement quoting and escaping for values foreach (var par in parameters) { var split = par.Split ('!'); if (split.Length < 2) { Console.Error.WriteLine ("Parameter does not have enough values: {0}", par); return -1; } if (split.Length > 2) { Console.Error.WriteLine ("Parameter has too many values: {0}", par); return -1; } string name = split[split.Length-2]; string val = split[split.Length-1]; if (string.IsNullOrEmpty (name)) { Console.Error.WriteLine ("Parameter has no name: {0}", par); return -1; } generator.AddParameter (split.Length > 3? split[0] : null, split.Length > 2? split[split.Length-3] : null, name, val); } foreach (var dir in directives) { var split = dir.Split ('!'); if (split.Length != 3) { Console.Error.WriteLine ("Directive does not have correct number of values: {0}", dir); return -1; } foreach (var s in split) { if (string.IsNullOrEmpty (s)) { Console.Error.WriteLine ("Directive has missing value: {0}", dir); return -1; } } generator.AddDirectiveProcessor (split[0], split[1], split[2]); } Console.Write("Processing '{0}'... ", inputFile); generator.ProcessTemplate (inputFile, outputFile); if (generator.Errors.HasErrors) { Console.WriteLine("failed."); } else { Console.WriteLine("completed successfully."); } foreach (System.CodeDom.Compiler.CompilerError err in generator.Errors) Console.Error.WriteLine ("{0}({1},{2}): {3} {4}", err.FileName, err.Line, err.Column, err.IsWarning? "WARNING" : "ERROR", err.ErrorText); return generator.Errors.HasErrors? -1 : 0; }
public static void UseInProcessCompiler(this TemplateGenerator generator) { generator.Engine.UseInProcessCompiler(); }
static void generateCSharpStatesEnum (string namespaceName, string enumName, string fileName, StringBuilder statesStringBuilder) { //Create template generator TemplateGenerator generator = new TemplateGenerator (); generator.Session.Add ("Namespace", namespaceName); //generator.Session.Add ("ClassName", controller.name.Replace (" ", "") + "Class"); generator.Session.Add ("EnumName", enumName); generator.Session.Add ("Values", statesStringBuilder.ToString ()); string generated; generated = Path.Combine (Application.dataPath, "Scripts"); //if Scripts doesn't exist if (!Directory.Exists (generated)) Directory.CreateDirectory (generated); //string[] filesFound=Directory.GetFiles (Path.Combine (generated, fileName)); //if (filesFound.Length == 0) { generated = namespaceToDirectory (generated, namespaceName); generated = Path.GetFullPath (Path.Combine (generated, fileName)); //} else { // generated=filesFound[0]; //} try { ///!!! OSX : error !Error running gmcs : Cannot find the specified file.! happen here cos of unity bug /// Download and install MRE(Mono Runtime Envi) /// http://www.mono-project.com/download/ /// saving doesn't work still cos of unknown fileName = Path.Combine (Path.Combine (Application.dataPath, "Editor"), "StatesEnumTemplate.tpl"); UnityEngine.Debug.Log ("Generating " + generated + " from template:" + fileName); generator.ProcessTemplate (fileName, generated); } catch (Exception e) { UnityEngine.Debug.LogError (e.Message); } AssetDatabase.Refresh (); }