protected internal virtual FilePreProcessorResult LoadScriptLibraries(string workingDirectory) { if (string.IsNullOrWhiteSpace(ScriptLibraryComposer.ScriptLibrariesFile)) { return(null); } var scriptLibrariesPath = Path.Combine(workingDirectory, FileSystem.PackagesFolder, ScriptLibraryComposer.ScriptLibrariesFile); if (FileSystem.FileExists(scriptLibrariesPath)) { _log.DebugFormat("Found Script Library at {0}", scriptLibrariesPath); return(FilePreProcessor.ProcessFile(scriptLibrariesPath)); } return(null); }
public override ScriptResult Execute(string script, params string[] scriptArgs) { Guard.AgainstNullArgument("script", script); try { if (script.StartsWith(":")) { var tokens = script.Split(' '); if (tokens[0].Length > 1) { var command = Commands.FirstOrDefault(x => x.CommandName == tokens[0].Substring(1)); if (command != null) { var argsToPass = new List <object>(); foreach (var argument in tokens.Skip(1)) { var argumentResult = ScriptEngine.Execute( argument, _scriptArgs, References, Namespaces, ScriptPackSession); if (argumentResult.CompileExceptionInfo != null) { throw new Exception( GetInvalidCommandArgumentMessage(argument), argumentResult.CompileExceptionInfo.SourceException); } if (argumentResult.ExecuteExceptionInfo != null) { throw new Exception( GetInvalidCommandArgumentMessage(argument), argumentResult.ExecuteExceptionInfo.SourceException); } if (!argumentResult.IsCompleteSubmission) { throw new Exception(GetInvalidCommandArgumentMessage(argument)); } argsToPass.Add(argumentResult.ReturnValue); } var commandResult = command.Execute(this, argsToPass.ToArray()); return(ProcessCommandResult(commandResult)); } } } var preProcessResult = FilePreProcessor.ProcessScript(script); ImportNamespaces(preProcessResult.Namespaces.ToArray()); foreach (var reference in preProcessResult.References) { var referencePath = FileSystem.GetFullPath(Path.Combine(FileSystem.BinFolder, reference)); AddReferences(FileSystem.FileExists(referencePath) ? referencePath : reference); } Console.ForegroundColor = ConsoleColor.Cyan; Buffer = (Buffer == null) ? preProcessResult.Code : Buffer + Environment.NewLine + preProcessResult.Code; var result = ScriptEngine.Execute(Buffer, _scriptArgs, References, Namespaces, ScriptPackSession); if (result == null) { return(ScriptResult.Empty); } if (result.CompileExceptionInfo != null) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(result.CompileExceptionInfo.SourceException.Message); } if (result.ExecuteExceptionInfo != null) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(result.ExecuteExceptionInfo.SourceException.Message); } if (result.InvalidNamespaces.Any()) { RemoveNamespaces(result.InvalidNamespaces.ToArray()); } if (!result.IsCompleteSubmission) { return(result); } if (result.ReturnValue != null) { Console.ForegroundColor = ConsoleColor.Yellow; var serializedResult = _serializer.Serialize(result.ReturnValue); Console.WriteLine(serializedResult); } Buffer = null; return(result); } catch (FileNotFoundException fileEx) { RemoveReferences(fileEx.FileName); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(Environment.NewLine + fileEx + Environment.NewLine); return(new ScriptResult(compilationException: fileEx)); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(Environment.NewLine + ex + Environment.NewLine); return(new ScriptResult(executionException: ex)); } finally { Console.ResetColor(); } }
public override ScriptResult Execute(string script, params string[] scriptArgs) { try { if (PreProcessorUtil.IsLoadLine(script)) { var filepath = PreProcessorUtil.GetPath(PreProcessorUtil.LoadString, script); if (FileSystem.FileExists(filepath)) { var processorResult = FilePreProcessor.ProcessFile(filepath); script = processorResult.Code; } else { throw new FileNotFoundException(string.Format("Could not find script '{0}'", filepath), filepath); } } else if (PreProcessorUtil.IsRLine(script)) { var assemblyName = PreProcessorUtil.GetPath(PreProcessorUtil.RString, script); var assemblyPath = FileSystem.GetFullPath(Path.Combine(Constants.BinFolder, assemblyName)); AddReferences(FileSystem.FileExists(assemblyPath) ? assemblyPath : assemblyName); return new ScriptResult(); } Console.ForegroundColor = ConsoleColor.Cyan; Buffer += script; var result = ScriptEngine.Execute(Buffer, _scriptArgs, References, DefaultNamespaces, ScriptPackSession); if (result != null) { if (result.CompileExceptionInfo != null) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(result.CompileExceptionInfo.SourceException.ToString()); } if (result.ExecuteExceptionInfo != null) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(result.ExecuteExceptionInfo.SourceException.ToString()); } if (result.IsPendingClosingChar) { return result; } if (result.ReturnValue != null) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(result.ReturnValue.ToJsv()); } Buffer = null; } return result; } catch (FileNotFoundException fileEx) { RemoveReferences(fileEx.FileName); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\r\n" + fileEx + "\r\n"); return new ScriptResult { CompileExceptionInfo = ExceptionDispatchInfo.Capture(fileEx) }; } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\r\n" + ex + "\r\n"); return new ScriptResult { ExecuteExceptionInfo = ExceptionDispatchInfo.Capture(ex) }; } finally { Console.ResetColor(); } }
public override ScriptResult Execute(string script, params string[] scriptArgs) { try { if (script.StartsWith("#clear", StringComparison.OrdinalIgnoreCase)) { Console.Clear(); return(new ScriptResult()); } if (script.StartsWith("#reset")) { Reset(); return(new ScriptResult()); } var preProcessResult = FilePreProcessor.ProcessScript(script); ImportNamespaces(preProcessResult.Namespaces.ToArray()); foreach (var reference in preProcessResult.References) { var referencePath = FileSystem.GetFullPath(Path.Combine(Constants.BinFolder, reference)); AddReferences(FileSystem.FileExists(referencePath) ? referencePath : reference); } Console.ForegroundColor = ConsoleColor.Cyan; Buffer += preProcessResult.Code; var result = ScriptEngine.Execute(Buffer, _scriptArgs, References, DefaultNamespaces, ScriptPackSession); if (result == null) { return(new ScriptResult()); } if (result.CompileExceptionInfo != null) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(result.CompileExceptionInfo.SourceException.Message); } if (result.ExecuteExceptionInfo != null) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(result.ExecuteExceptionInfo.SourceException.Message); } if (result.IsPendingClosingChar) { return(result); } if (result.ReturnValue != null) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(result.ReturnValue.ToJsv()); } Buffer = null; return(result); } catch (FileNotFoundException fileEx) { RemoveReferences(fileEx.FileName); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\r\n" + fileEx + "\r\n"); return(new ScriptResult { CompileExceptionInfo = ExceptionDispatchInfo.Capture(fileEx) }); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\r\n" + ex + "\r\n"); return(new ScriptResult { ExecuteExceptionInfo = ExceptionDispatchInfo.Capture(ex) }); } finally { Console.ResetColor(); } }