private bool RunScriptFile(string path) { string hash; using (var stream = File.OpenRead(path)) { hash = Encoding.UTF8.GetString(System.Security.Cryptography.MD5.Create().ComputeHash(stream)); } var scriptName = Path.GetFileNameWithoutExtension(path); string value; if (scriptName != null && scriptHashes.TryGetValue(scriptName, out value) && value == hash) { return(false); } using (StartScriptProcessingSession(new ScriptSource(scriptName, path))) { try { ParseScriptComments(path); } catch (Exception ex) { _logger.Warn(string.Format("Could not parse comments: {0}", ex.Message)); } var console = new ScriptConsole(); var scriptServicesBuilder = new ScriptServicesBuilder(console, _logger); scriptServicesBuilder.Cache(false); scriptServicesBuilder.LoadModules("csx"); var scriptServiceRoot = scriptServicesBuilder.Build(); var defaultReferences = ScriptExecutor.DefaultReferences.ToArray(); var fileSystem = new FileSystem(); //where clause hack using the exact same code that the hack in scriptCS sues to filter their list of assemblies in ShouldLoadAssembly in RuntimeServices.cs var packageReferences = scriptServiceRoot.PackageAssemblyResolver.GetAssemblyNames(Environment.CurrentDirectory).Where(fileSystem.IsPathRooted); scriptServiceRoot.Executor.AddReferences(defaultReferences.Concat(NuGetPackageAssemblyResolver.FilterAssembliesToMostRecent(packageReferences)).ToArray()); scriptServiceRoot.Executor.ImportNamespaces( ScriptExecutor.DefaultNamespaces.Concat(new[] { "MMBot", "Newtonsoft.Json", "Newtonsoft.Json.Linq", "HtmlAgilityPack", "System.Xml", "System.Net", "System.Net.Http" }).ToArray()); scriptServiceRoot.Executor.AddReference <Robot>(); scriptServiceRoot.Executor.AddReference <ILog>(); scriptServiceRoot.Executor.AddReference <JArray>(); scriptServiceRoot.Executor.AddReference <HtmlDocument>(); scriptServiceRoot.Executor.AddReference <HttpResponseMessage>(); scriptServiceRoot.Executor.AddReference <IScriptPackContext>(); scriptServiceRoot.Executor.AddReference <OwinContext>(); scriptServiceRoot.Executor.Initialize(new string[0], new IScriptPack[] { new MMBot2ScriptPackInternal(_robot), }); var result = scriptServiceRoot.Executor.Execute(path); if (!result.IsCompleteSubmission) { _logger.Error(string.Format("{0}: error compiling script - {1}", path, result.CompileExceptionInfo.SourceException.Message)); } if (result.CompileExceptionInfo != null) { _logger.Error(result.CompileExceptionInfo.SourceException.Message); _logger.Debug(result.CompileExceptionInfo.SourceException); } if (result.ExecuteExceptionInfo != null) { _logger.Error(result.ExecuteExceptionInfo.SourceException); } scriptHashes[CurrentScriptSource.Name] = hash; return(result.IsCompleteSubmission && result.CompileExceptionInfo == null && result.ExecuteExceptionInfo == null); } }
private bool RunScriptFile(string path) { using (StartScriptProcessingSession(new ScriptSource(Path.GetFileNameWithoutExtension(path), path))) { try { ParseScriptComments(path); } catch (Exception ex) { _logger.Warn(string.Format("Could not parse comments: {0}", ex.Message)); } var console = new ScriptConsole(); var scriptServicesBuilder = new ScriptServicesBuilder(console, _logger); scriptServicesBuilder.Cache(false); scriptServicesBuilder.LoadModules("csx", new string[0]); var scriptServiceRoot = scriptServicesBuilder.Build(); var defaultReferences = ScriptExecutor.DefaultReferences.ToArray(); var packageReferences = scriptServiceRoot.PackageAssemblyResolver.GetAssemblyNames(Environment.CurrentDirectory); scriptServiceRoot.Executor.AddReferences(defaultReferences.Concat(NuGetPackageAssemblyResolver.FilterAssembliesToMostRecent(packageReferences)).ToArray()); scriptServiceRoot.Executor.ImportNamespaces( ScriptExecutor.DefaultNamespaces.Concat(new[] { "MMBot", "Newtonsoft.Json", "Newtonsoft.Json.Linq", "HtmlAgilityPack", "System.Xml", "System.Net", "System.Net.Http" }).ToArray()); scriptServiceRoot.Executor.AddReference <Robot>(); scriptServiceRoot.Executor.AddReference <ILog>(); scriptServiceRoot.Executor.AddReference <JArray>(); scriptServiceRoot.Executor.AddReference <HtmlDocument>(); scriptServiceRoot.Executor.AddReference <HttpResponseMessage>(); scriptServiceRoot.Executor.AddReference <IScriptPackContext>(); scriptServiceRoot.Executor.AddReference <OwinContext>(); scriptServiceRoot.Executor.Initialize(new string[0], new IScriptPack[] { new MMBot2ScriptPackInternal(_robot), }); var result = scriptServiceRoot.Executor.Execute(path); if (result.CompileExceptionInfo != null) { _logger.Error(result.CompileExceptionInfo.SourceException.Message); _logger.Debug(result.CompileExceptionInfo.SourceException); } if (result.ExecuteExceptionInfo != null) { _logger.Error(result.ExecuteExceptionInfo.SourceException); } return(result.CompileExceptionInfo == null && result.ExecuteExceptionInfo == null); } }
private bool RunScriptFile(string path) { string hash; using (var stream = File.OpenRead(path)) { hash = Encoding.UTF8.GetString(System.Security.Cryptography.MD5.Create().ComputeHash(stream)); } var scriptName = Path.GetFileNameWithoutExtension(path); if (scriptName != null && scriptHashes.ContainsKey(scriptName) && scriptHashes[scriptName] == hash) { return(false); } using (StartScriptProcessingSession(new ScriptSource(scriptName, path))) { try { ParseScriptComments(path); } catch (Exception ex) { _logger.Warn(string.Format("Could not parse comments: {0}", ex.Message)); } var console = new ScriptConsole(); var scriptServicesBuilder = new ScriptServicesBuilder(console, _logger); scriptServicesBuilder.Cache(false); scriptServicesBuilder.LoadModules("csx", new string[0]); var scriptServiceRoot = scriptServicesBuilder.Build(); var defaultReferences = ScriptExecutor.DefaultReferences.ToArray(); var packageReferences = scriptServiceRoot.PackageAssemblyResolver.GetAssemblyNames(Environment.CurrentDirectory); scriptServiceRoot.Executor.AddReferences(defaultReferences.Concat(NuGetPackageAssemblyResolver.FilterAssembliesToMostRecent(packageReferences)).ToArray()); scriptServiceRoot.Executor.ImportNamespaces( ScriptExecutor.DefaultNamespaces.Concat(new[] { "MMBot", "Newtonsoft.Json", "Newtonsoft.Json.Linq", "HtmlAgilityPack", "System.Xml", "System.Net", "System.Net.Http" }).ToArray()); scriptServiceRoot.Executor.AddReference <Robot>(); scriptServiceRoot.Executor.AddReference <ILog>(); scriptServiceRoot.Executor.AddReference <JArray>(); scriptServiceRoot.Executor.AddReference <HtmlDocument>(); scriptServiceRoot.Executor.AddReference <HttpResponseMessage>(); scriptServiceRoot.Executor.AddReference <IScriptPackContext>(); scriptServiceRoot.Executor.AddReference <OwinContext>(); scriptServiceRoot.Executor.Initialize(new string[0], new IScriptPack[] { new MMBot2ScriptPackInternal(_robot), }); var result = scriptServiceRoot.Executor.Execute(path); if (result.ExpectingClosingChar.HasValue) { _logger.Error(string.Format("{0}: closing {1} expected", path, result.ExpectingClosingChar.Value)); } if (result.CompileExceptionInfo != null) { _logger.Error(result.CompileExceptionInfo.SourceException.Message); _logger.Debug(result.CompileExceptionInfo.SourceException); } if (result.ExecuteExceptionInfo != null) { _logger.Error(result.ExecuteExceptionInfo.SourceException); } scriptHashes[CurrentScriptSource.Name] = hash; return(!result.ExpectingClosingChar.HasValue && result.CompileExceptionInfo == null && result.ExecuteExceptionInfo == null); } }
private bool RunScriptFile(string path) { string hash; using (var stream = File.OpenRead(path)) { hash = Encoding.UTF8.GetString(System.Security.Cryptography.MD5.Create().ComputeHash(stream)); } var scriptName = Path.GetFileNameWithoutExtension(path); string value; if (scriptName != null && scriptHashes.TryGetValue(scriptName, out value) && value == hash) { return false; } using (StartScriptProcessingSession(new ScriptSource(scriptName, path))) { try { ParseScriptComments(path); } catch (Exception ex) { _logger.Warn(string.Format("Could not parse comments: {0}", ex.Message)); } var console = new ScriptConsole(); var scriptServicesBuilder = new ScriptServicesBuilder(console, _logger); scriptServicesBuilder.Cache(false); scriptServicesBuilder.LoadModules("csx"); var scriptServiceRoot = scriptServicesBuilder.Build(); var defaultReferences = ScriptExecutor.DefaultReferences.ToArray(); var fileSystem = new FileSystem(); //where clause hack using the exact same code that the hack in scriptCS sues to filter their list of assemblies in ShouldLoadAssembly in RuntimeServices.cs var packageReferences = scriptServiceRoot.PackageAssemblyResolver.GetAssemblyNames(Environment.CurrentDirectory).Where(fileSystem.IsPathRooted); scriptServiceRoot.Executor.AddReferences(defaultReferences.Concat(NuGetPackageAssemblyResolver.FilterAssembliesToMostRecent(packageReferences)).ToArray()); scriptServiceRoot.Executor.ImportNamespaces( ScriptExecutor.DefaultNamespaces.Concat(new[] { "MMBot", "Newtonsoft.Json", "Newtonsoft.Json.Linq", "HtmlAgilityPack", "System.Xml", "System.Net", "System.Net.Http" }).ToArray()); scriptServiceRoot.Executor.AddReference<Robot>(); scriptServiceRoot.Executor.AddReference<ILog>(); scriptServiceRoot.Executor.AddReference<JArray>(); scriptServiceRoot.Executor.AddReference<HtmlDocument>(); scriptServiceRoot.Executor.AddReference<HttpResponseMessage>(); scriptServiceRoot.Executor.AddReference<IScriptPackContext>(); scriptServiceRoot.Executor.AddReference<OwinContext>(); scriptServiceRoot.Executor.Initialize(new string[0], new IScriptPack[] { new MMBot2ScriptPackInternal(_robot), }); var result = scriptServiceRoot.Executor.Execute(path); if (!result.IsCompleteSubmission) { _logger.Error(string.Format("{0}: error compiling script - {1}", path, result.CompileExceptionInfo.SourceException.Message)); } if (result.CompileExceptionInfo != null) { _logger.Error(result.CompileExceptionInfo.SourceException.Message); _logger.Debug(result.CompileExceptionInfo.SourceException); } if (result.ExecuteExceptionInfo != null) { _logger.Error(result.ExecuteExceptionInfo.SourceException); } scriptHashes[CurrentScriptSource.Name] = hash; return result.IsCompleteSubmission && result.CompileExceptionInfo == null && result.ExecuteExceptionInfo == null; } }
private bool RunScriptFile(string path) { using (StartScriptProcessingSession(new ScriptSource(Path.GetFileNameWithoutExtension(path), path))) { try { ParseScriptComments(path); } catch (Exception ex) { _logger.Warn(string.Format("Could not parse comments: {0}", ex.Message)); } var console = new ScriptConsole(); var scriptServicesBuilder = new ScriptServicesBuilder(console, _logger); scriptServicesBuilder.Cache(false); scriptServicesBuilder.LoadModules("csx", new string[0]); var scriptServiceRoot = scriptServicesBuilder.Build(); var defaultReferences = ScriptExecutor.DefaultReferences.ToArray(); var packageReferences = scriptServiceRoot.PackageAssemblyResolver.GetAssemblyNames(Environment.CurrentDirectory); scriptServiceRoot.Executor.AddReferences(defaultReferences.Concat(NuGetPackageAssemblyResolver.FilterAssembliesToMostRecent(packageReferences)).ToArray()); scriptServiceRoot.Executor.ImportNamespaces( ScriptExecutor.DefaultNamespaces.Concat(new[] { "MMBot", "Newtonsoft.Json", "Newtonsoft.Json.Linq", "HtmlAgilityPack", "System.Xml", "System.Net", "System.Net.Http" }).ToArray()); scriptServiceRoot.Executor.AddReference<Robot>(); scriptServiceRoot.Executor.AddReference<ILog>(); scriptServiceRoot.Executor.AddReference<JArray>(); scriptServiceRoot.Executor.AddReference<HtmlDocument>(); scriptServiceRoot.Executor.AddReference<HttpResponseMessage>(); scriptServiceRoot.Executor.AddReference<IScriptPackContext>(); scriptServiceRoot.Executor.AddReference<OwinContext>(); scriptServiceRoot.Executor.Initialize(new string[0], new IScriptPack[] { new MMBot2ScriptPackInternal(_robot), }); var result = scriptServiceRoot.Executor.Execute(path); if (result.CompileExceptionInfo != null) { _logger.Error(result.CompileExceptionInfo.SourceException.Message); _logger.Debug(result.CompileExceptionInfo.SourceException); } if (result.ExecuteExceptionInfo != null) { _logger.Error(result.ExecuteExceptionInfo.SourceException); } return result.CompileExceptionInfo == null && result.ExecuteExceptionInfo == null; } }