static void Run(string[] args)
{
// parse CLI options
var options = new Options();
if (!CommandLineParser.Default.ParseArguments(args, options))
return;
// run continuously if that's what we specified on the command line
while (true)
{
// run in a separate domain so we can unload assemblies
var domain = AppDomain.CreateDomain("Script Runner", null, AppDomain.CurrentDomain.BaseDirectory, AppDomain.CurrentDomain.RelativeSearchPath, true);
domain.AssemblyResolve += (o, e) => ScriptRunner.Resolver(null, e);
var runner = (ScriptRunner)domain.CreateInstanceAndUnwrap(typeof(ScriptRunner).Assembly.FullName, typeof(ScriptRunner).FullName);
BuildResults results = null;
try
{
results = runner.Run(options.BuildScript, options.LogLevel, nextBuildIsRebuild);
}
catch (Exception e)
{
Console.WriteLine(e);
}
nextBuildIsRebuild = false;
AppDomain.Unload(domain);
Console.WriteLine();
Directory.SetCurrentDirectory(StartupPath);
if (results == null)
{
Console.WriteLine("Press return to try again.");
Console.ReadLine();
continue;
}
if (!results.ShouldRunAgain)
break;
Console.WriteLine("Waiting for changes... (press enter to force a rebuild)");
WaitForChanges(options, results);
Console.WriteLine();
}
}