static void RunAllTemplates() { #region Find all CSX templates Console.WriteLine(string.Format("Searching for Templates...")); DirectoryInfo di = new DirectoryInfo(Environment.CurrentDirectory); FileInfo[] scripts = new FileInfo[0]; while (scripts.Length == 0 && di.Parent != null) { if (System.IO.Directory.Exists(System.IO.Path.Combine(di.FullName, "Templates"))) { scripts = di.GetFiles("Templates\\*.csx"); } di = di.Parent; } if (scripts.Length == 0) { Console.WriteLine(string.Format("Can't find Templates folder")); Console.ReadLine(); Environment.Exit(-1); } #endregion // Any dummy path is fine as long as we only use BuildAction.GenerateOnly (so Scripty don't need to manipulate csproj file) var scripty = new Scripty.Core.ScriptEngine("C:\\dummy"); foreach (var script in scripts) { Console.Write(string.Format("Regenerating {0}...", script.FullName)); var result = scripty.Evaluate(new Scripty.Core.ScriptSource(script.FullName, File.ReadAllText(script.FullName))).Result; Console.WriteLine(string.Format("done! ({0} file(s): {1})", result.OutputFiles.Count, string.Join(", ", result.OutputFiles.Select(o => o.FilePath)))); } }
static void FindAndRunTemplate() { #region Find CSPROJ, SLN, CSX DirectoryInfo di = new DirectoryInfo(Environment.CurrentDirectory); string csProj = null; string sln = null; string csx = null; string csProjName = "EntityFramework-Scripty-Templates.csproj"; string slnProjName = "EntityFramework-Scripty-Templates.sln"; string csxName = "Templates\\GenerateEFModel.csx"; while ((csProj == null || sln == null || csx == null) && di.Parent != null) { if (System.IO.File.Exists(System.IO.Path.Combine(di.FullName, csProjName))) { csProj = System.IO.Path.Combine(di.FullName, csProjName); } if (System.IO.File.Exists(System.IO.Path.Combine(di.FullName, slnProjName))) { sln = System.IO.Path.Combine(di.FullName, slnProjName); } if (System.IO.File.Exists(System.IO.Path.Combine(di.FullName, csxName))) { csx = System.IO.Path.Combine(di.FullName, csxName); } di = di.Parent; } #endregion var scripty = new Scripty.Core.ScriptEngine(csProj); var result = scripty.Evaluate(new Scripty.Core.ScriptSource(csx, File.ReadAllText(csx))).Result; }