public void Main(string[] args) { var assemblyReslover = new AspNet5AssemblyResolver(_libraryManager); var scriptServicesBuilder = new ScriptServicesBuilder(Console, new DefaultLogProvider()).Cache(false).Repl(true); scriptServicesBuilder = IsMono ? scriptServicesBuilder.ScriptEngine<MonoScriptEngine>() : scriptServicesBuilder.ScriptEngine<RoslynScriptEngine>(); ((ScriptServicesBuilder)scriptServicesBuilder).Overrides[typeof (IAssemblyResolver)] = assemblyReslover; var scriptcs = scriptServicesBuilder.Build(); scriptcs.Repl.Initialize(assemblyReslover.GetAssemblyPaths(string.Empty), Enumerable.Empty<IScriptPack>()); try { while (ExecuteLine(scriptcs.Repl)) { } Console.WriteLine(); } catch (Exception ex) { var oldColor = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(ex.Message); Console.ForegroundColor = oldColor; } }
private static int Main(string[] args) { string[] scriptArgs; ScriptCsArgs.SplitScriptArgs(ref args, out scriptArgs); var commandArgs = ParseArguments(args); var configurator = new LoggerConfigurator(commandArgs.LogLevel); var console = new ScriptConsole(); configurator.Configure(console); var logger = configurator.GetLogger(); var scriptServicesBuilder = new ScriptServicesBuilder(console, logger) . Debug(commandArgs.Debug). LogLevel(commandArgs.LogLevel). ScriptName(commandArgs.ScriptName). Repl(commandArgs.Repl); var modules = GetModuleList(commandArgs.Modules); var extension = Path.GetExtension(commandArgs.ScriptName); if (extension != null) extension = extension.Substring(1); scriptServicesBuilder.LoadModules(extension, modules); var scriptServiceRoot = scriptServicesBuilder.Build(); var commandFactory = new CommandFactory(scriptServiceRoot); var command = commandFactory.CreateCommand(commandArgs, scriptArgs); var result = command.Execute(); return result == CommandResult.Success ? 0 : -1; }
public void ShouldNotLoadScriptPacksIfLoadScriptPacksIsFalse(IConsole console, TestLogProvider logProvider, IScriptEngine engine) { var builder = new ScriptServicesBuilder(console, logProvider); builder.Overrides[typeof(IScriptEngine)] = engine.GetType(); builder.LoadScriptPacks(false); builder.Build(); var runtimeServices = (RuntimeServices)builder.RuntimeServices; runtimeServices.InitDirectoryCatalog.ShouldBeFalse(); }
public void ShouldLoadScriptPacksIfScriptNameIsSet(IConsole console, TestLogProvider logProvider, IScriptEngine engine) { var builder = new ScriptServicesBuilder(console, logProvider); builder.Overrides[typeof(IScriptEngine)] = engine.GetType(); builder.ScriptName(""); builder.Build(); var runtimeServices = (RuntimeServices)builder.RuntimeServices; runtimeServices.InitDirectoryCatalog.ShouldBeTrue(); }
public ScriptCsService() { var logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); var scriptServicesBuilder = new ScriptServicesBuilder(new ScriptConsole(), logger). LogLevel(LogLevel.Info).Cache(false).Repl(false).ScriptEngine<RoslynScriptEngine>(); Root = scriptServicesBuilder.Build(); }
private static int Main(string[] args) { ProfileOptimization.SetProfileRoot(typeof(Program).Assembly.Location); ProfileOptimization.StartProfile(typeof(Program).Assembly.GetName().Name + ".profile"); var console = new ScriptConsole(); var parser = new ArgumentHandler(new ArgumentParser(console), new ConfigFileParser(console), new FileSystem()); var arguments = parser.Parse(args); var commandArgs = arguments.CommandArguments; var scriptArgs = arguments.ScriptArguments; var configurator = new LoggerConfigurator(commandArgs.LogLevel); configurator.Configure(console); var logger = configurator.GetLogger(); var scriptServicesBuilder = new ScriptServicesBuilder(console, logger) .Cache(commandArgs.Cache) .Debug(commandArgs.Debug) .LogLevel(commandArgs.LogLevel) .ScriptName(commandArgs.ScriptName) .Repl(commandArgs.Repl); var modules = GetModuleList(commandArgs.Modules); var extension = Path.GetExtension(commandArgs.ScriptName); if (string.IsNullOrWhiteSpace(extension) && !commandArgs.Repl) { // No extension was given, i.e we might have something like // "scriptcs foo" to deal with. We activate the default extension, // to make sure it's given to the LoadModules below. extension = ".csx"; if (!string.IsNullOrWhiteSpace(commandArgs.ScriptName)) { // If the was in fact a script specified, we'll extend it // with the default extension, assuming the user giving // "scriptcs foo" actually meant "scriptcs foo.csx". We // perform no validation here thought; let it be done by // the activated command. If the file don't exist, it's // up to the command to detect and report. commandArgs.ScriptName += extension; } } scriptServicesBuilder.LoadModules(extension, modules); var scriptServiceRoot = scriptServicesBuilder.Build(); var commandFactory = new CommandFactory(scriptServiceRoot); var command = commandFactory.CreateCommand(commandArgs, scriptArgs); var result = command.Execute(); return result == CommandResult.Success ? 0 : -1; }
public ScriptCsHost() { var logger = new ConsoleOutLogger("default", Common.Logging.LogLevel.Info, true, true, false, "dd MMM yyy hh:mm:ss"); var scriptCsBuilder = new ScriptServicesBuilder(new ScriptConsole(), logger) .LogLevel(LogLevel.Debug) .Cache(true) .Repl(false) .ScriptEngine<RoslynScriptEngine>(); _exec = scriptCsBuilder.Build().Executor; }
private ScriptServices CreateScriptServices() { var console = new PersonalTrainerConsole(); ILogProvider logger = new DefaultLogProvider(); var builder = new ScriptServicesBuilder(console, logger); builder.ScriptEngine<RoslynScriptEngine>(); builder.FileSystem<ScriptFileSystem>(); return builder.Build(); }
private ScriptServices CreateScriptServices(bool useLogging) { var console = new ScriptConsole(); var configurator = new LoggerConfigurator(useLogging ? LogLevel.Debug : LogLevel.Info); configurator.Configure(console); var logger = configurator.GetLogger(); var builder = new ScriptServicesBuilder(console, logger); builder.ScriptEngine<RoslynScriptEngine>(); return builder.Build(); }
public static void Main(string[] args) { var console = (IConsole) new ScriptConsole(); var logProvider = new ColoredConsoleLogProvider (LogLevel.Info, console); var builder = new ScriptServicesBuilder (console, logProvider); SetEngine (builder); var services = builder.Build (); var executor = (ScriptExecutor) services.Executor; executor.Initialize (Enumerable.Empty<string>(), Enumerable.Empty<IScriptPack>()); ExecuteLooseScript (executor); ExecuteFile (executor); }
private static int Main(string[] args) { var console = new ScriptConsole(); var parser = new ArgumentHandler(new ArgumentParser(console), new ConfigFileParser(console), new FileSystem()); var arguments = parser.Parse(args); var commandArgs = arguments.CommandArguments; var scriptArgs = arguments.ScriptArguments; var configurator = new LoggerConfigurator(commandArgs.LogLevel); configurator.Configure(console); var logger = configurator.GetLogger(); var scriptServicesBuilder = new ScriptServicesBuilder(console, logger) .InMemory(commandArgs.InMemory) .LogLevel(commandArgs.LogLevel) .ScriptName(commandArgs.ScriptName) .Repl(commandArgs.Repl); var modules = GetModuleList(commandArgs.Modules); var extension = Path.GetExtension(commandArgs.ScriptName); if (!string.IsNullOrWhiteSpace(extension)) { extension = extension.Substring(1); } else if (extension == string.Empty) { console.WriteLine(string.Format("{0} is not a valid script name.", commandArgs.ScriptName)); return 1; } scriptServicesBuilder.LoadModules(extension, modules); var scriptServiceRoot = scriptServicesBuilder.Build(); var commandFactory = new CommandFactory(scriptServiceRoot); var command = commandFactory.CreateCommand(commandArgs, scriptArgs); var result = command.Execute(); return result == CommandResult.Success ? 0 : -1; }
public void Initialize() { var console = new ScriptConsole(); var scriptServicesBuilder = new ScriptServicesBuilder(console, _logger); scriptServicesBuilder.LoadModules("csx", new string[0]); _scriptServiceRoot = scriptServicesBuilder.Build(); _scriptServiceRoot.Executor.AddReferences(ScriptExecutor.DefaultReferences.ToArray()); _scriptServiceRoot.Executor.ImportNamespaces(ScriptExecutor.DefaultNamespaces.Concat(new[] { "MMBot", "Newtonsoft.Json", "Newtonsoft.Json.Linq" }).ToArray()); _scriptServiceRoot.Executor.AddReference<Robot>(); _scriptServiceRoot.Executor.AddReference<JArray>(); _scriptServiceRoot.Executor.AddReference<HttpResponseMessage>(); _scriptServiceRoot.Executor.AddReference<IScriptPackContext>(); _scriptServiceRoot.Executor.Initialize(new string[0], new IScriptPack[] { new MMBot2ScriptPackInternal(_robot), }); }
private static ScriptServices BuildScriptServices(InOutConsole console) { var logConfiguration = new LoggerConfigurator(LogLevel.Info); logConfiguration.Configure(console); var logger = logConfiguration.GetLogger(); var initializationServices = new InitializationServices(logger); initializationServices.GetAppDomainAssemblyResolver().Initialize(); var scriptServicesBuilder = new ScriptServicesBuilder(console, logger, null, null, initializationServices) .Repl(true); scriptServicesBuilder.LoadModules(""); var scriptServices = scriptServicesBuilder.Build(); initializationServices.GetInstallationProvider().Initialize(); scriptServices.Repl.Initialize(Enumerable.Empty<string>(), Enumerable.Empty<IScriptPack>()); return scriptServices; }
public bool RunScriptFile(string path) { var console = new ScriptConsole(); var scriptServicesBuilder = new ScriptServicesBuilder(console, _logger); scriptServicesBuilder.InMemory(true); scriptServicesBuilder.LoadModules("csx", new string[0]); var scriptServiceRoot = scriptServicesBuilder.Build(); scriptServiceRoot.Executor.AddReferences(ScriptExecutor.DefaultReferences.ToArray()); scriptServiceRoot.Executor.ImportNamespaces(ScriptExecutor.DefaultNamespaces.Concat(new[] { "MMBot", "Newtonsoft.Json", "Newtonsoft.Json.Linq", "System.Xml", "System.Net", "System.Net.Http" }).ToArray()); scriptServiceRoot.Executor.AddReference<Robot>(); scriptServiceRoot.Executor.AddReference<ILog>(); scriptServiceRoot.Executor.AddReference<JArray>(); scriptServiceRoot.Executor.AddReference<HttpResponseMessage>(); scriptServiceRoot.Executor.AddReference<IScriptPackContext>(); 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; }
public void ShouldResolveScriptServices() { _builder.Build().ShouldEqual(_scriptServices); }
public bool RunScriptFile(string 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.InMemory(true); 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(packageReferences).ToArray()); scriptServiceRoot.Executor.ImportNamespaces(ScriptExecutor.DefaultNamespaces.Concat(new[] { "MMBot", "Newtonsoft.Json", "Newtonsoft.Json.Linq", "System.Xml", "System.Net", "System.Net.Http" }).ToArray()); scriptServiceRoot.Executor.AddReference<Robot>(); scriptServiceRoot.Executor.AddReference<ILog>(); scriptServiceRoot.Executor.AddReference<JArray>(); 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; }
public void Initalize() { _logger.LogInformation($"Detecting CSX files in '{_env.Path}'."); var allCsxFiles = Directory.GetFiles(_env.Path, "*.csx", SearchOption.TopDirectoryOnly); if (allCsxFiles.Length == 0) { _logger.LogInformation("Could not find any CSX files"); return; } _scriptCsContext.Path = _env.Path; _logger.LogInformation($"Found {allCsxFiles.Length} CSX files."); //script name is added here as a fake one (dir path not even a real file); this is OK though -> it forces MEF initialization var scriptServicesBuilder = new ScriptServicesBuilder(new ScriptConsole(), LogManager.GetCurrentClassLogger()). LogLevel(LogLevel.Info).Cache(false).Repl(false).ScriptName(_env.Path).ScriptEngine <NullScriptEngine>(); _scriptServices = scriptServicesBuilder.Build(); var mscorlib = MetadataReference.CreateFromAssembly(typeof(object).GetTypeInfo().Assembly); var systemCore = MetadataReference.CreateFromAssembly(typeof(Enumerable).GetTypeInfo().Assembly); var scriptcsContracts = MetadataReference.CreateFromAssembly(typeof(IScriptHost).Assembly); var parseOptions = new CSharpParseOptions(LanguageVersion.CSharp6, DocumentationMode.Parse, SourceCodeKind.Script); var scriptPacks = _scriptServices.ScriptPackResolver.GetPacks().ToList(); var assemblyPaths = _scriptServices.AssemblyResolver.GetAssemblyPaths(_env.Path); foreach (var csxPath in allCsxFiles) { try { _scriptCsContext.CsxFiles.Add(csxPath); var processResult = _scriptServices.FilePreProcessor.ProcessFile(csxPath); var references = new List <MetadataReference> { mscorlib, systemCore, scriptcsContracts }; var usings = new List <string>(ScriptExecutor.DefaultNamespaces); //default references ImportReferences(references, ScriptExecutor.DefaultReferences); //file usings usings.AddRange(processResult.Namespaces); //#r references ImportReferences(references, processResult.References); //nuget references ImportReferences(references, assemblyPaths); //script packs if (scriptPacks != null && scriptPacks.Any()) { var scriptPackSession = new ScriptPackSession(scriptPacks, new string[0]); scriptPackSession.InitializePacks(); //script pack references ImportReferences(references, scriptPackSession.References); //script pack usings usings.AddRange(scriptPackSession.Namespaces); _scriptCsContext.ScriptPacks.UnionWith(scriptPackSession.Contexts.Select(pack => pack.GetType().ToString())); } _scriptCsContext.References.UnionWith(references.Select(x => x.Display)); _scriptCsContext.Usings.UnionWith(usings); var compilationOptions = new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary, usings: usings.Distinct()); var fileName = Path.GetFileName(csxPath); var projectId = ProjectId.CreateNewId(Guid.NewGuid().ToString()); var project = ProjectInfo.Create(projectId, VersionStamp.Create(), fileName, $"{fileName}.dll", LanguageNames.CSharp, null, null, compilationOptions, parseOptions, null, null, references, null, null, true, typeof(IScriptHost)); _workspace.AddProject(project); AddFile(csxPath, projectId); foreach (var filePath in processResult.LoadedScripts.Distinct().Except(new[] { csxPath })) { _scriptCsContext.CsxFiles.Add(filePath); var loadedFileName = Path.GetFileName(filePath); var loadedFileProjectId = ProjectId.CreateNewId(Guid.NewGuid().ToString()); var loadedFileSubmissionProject = ProjectInfo.Create(loadedFileProjectId, VersionStamp.Create(), $"{loadedFileName}-LoadedFrom-{fileName}", $"{loadedFileName}-LoadedFrom-{fileName}.dll", LanguageNames.CSharp, null, null, compilationOptions, parseOptions, null, null, references, null, null, true, typeof(IScriptHost)); _workspace.AddProject(loadedFileSubmissionProject); AddFile(filePath, loadedFileProjectId); _workspace.AddProjectReference(projectId, new ProjectReference(loadedFileProjectId)); } } catch (Exception ex) { _logger.LogError($"{csxPath} will be ignored due to the following error:", ex); } } }
public void Initalize(IConfiguration configuration) { _logger.LogInformation($"Detecting CSX files in '{_env.Path}'."); var allCsxFiles = Directory.GetFiles(_env.Path, "*.csx", SearchOption.TopDirectoryOnly); if (allCsxFiles.Length == 0) { _logger.LogInformation("Could not find any CSX files"); return; } _scriptCsContext.Path = _env.Path; _logger.LogInformation($"Found {allCsxFiles.Length} CSX files."); //script name is added here as a fake one (dir path not even a real file); this is OK though -> it forces MEF initialization var scriptServicesBuilder = new ScriptServicesBuilder(new ScriptConsole(), LogManager.GetCurrentClassLogger()). LogLevel(LogLevel.Info).Cache(false).Repl(false).ScriptName(_env.Path).ScriptEngine<NullScriptEngine>(); _scriptServices = scriptServicesBuilder.Build(); var mscorlib = MetadataReference.CreateFromFile(typeof(object).GetTypeInfo().Assembly.Location); var systemCore = MetadataReference.CreateFromFile(typeof(Enumerable).GetTypeInfo().Assembly.Location); var scriptcsContracts = MetadataReference.CreateFromFile(typeof(IScriptHost).Assembly.Location); var parseOptions = new CSharpParseOptions(LanguageVersion.CSharp6, DocumentationMode.Parse, SourceCodeKind.Script); var scriptPacks = _scriptServices.ScriptPackResolver.GetPacks().ToList(); var assemblyPaths = _scriptServices.AssemblyResolver.GetAssemblyPaths(_env.Path); foreach (var csxPath in allCsxFiles) { try { _scriptCsContext.CsxFiles.Add(csxPath); var processResult = _scriptServices.FilePreProcessor.ProcessFile(csxPath); var references = new List<MetadataReference> { mscorlib, systemCore, scriptcsContracts }; var usings = new List<string>(ScriptExecutor.DefaultNamespaces); //default references ImportReferences(references, ScriptExecutor.DefaultReferences); //file usings usings.AddRange(processResult.Namespaces); //#r references ImportReferences(references, processResult.References); //nuget references ImportReferences(references, assemblyPaths); //script packs if (scriptPacks != null && scriptPacks.Any()) { var scriptPackSession = new ScriptPackSession(scriptPacks, new string[0]); scriptPackSession.InitializePacks(); //script pack references ImportReferences(references, scriptPackSession.References); //script pack usings usings.AddRange(scriptPackSession.Namespaces); _scriptCsContext.ScriptPacks.UnionWith(scriptPackSession.Contexts.Select(pack => pack.GetType().ToString())); } _scriptCsContext.References.UnionWith(references.Select(x => x.Display)); _scriptCsContext.Usings.UnionWith(usings); var compilationOptions = new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary, usings: usings.Distinct()); var fileName = Path.GetFileName(csxPath); var projectId = ProjectId.CreateNewId(Guid.NewGuid().ToString()); var project = ProjectInfo.Create(projectId, VersionStamp.Create(), fileName, $"{fileName}.dll", LanguageNames.CSharp, null, null, compilationOptions, parseOptions, null, null, references, null, null, true, typeof(IScriptHost)); _workspace.AddProject(project); AddFile(csxPath, projectId); foreach (var filePath in processResult.LoadedScripts.Distinct().Except(new[] { csxPath })) { _scriptCsContext.CsxFiles.Add(filePath); var loadedFileName = Path.GetFileName(filePath); var loadedFileProjectId = ProjectId.CreateNewId(Guid.NewGuid().ToString()); var loadedFileSubmissionProject = ProjectInfo.Create(loadedFileProjectId, VersionStamp.Create(), $"{loadedFileName}-LoadedFrom-{fileName}", $"{loadedFileName}-LoadedFrom-{fileName}.dll", LanguageNames.CSharp, null, null, compilationOptions, parseOptions, null, null, references, null, null, true, typeof(IScriptHost)); _workspace.AddProject(loadedFileSubmissionProject); AddFile(filePath, loadedFileProjectId); _workspace.AddProjectReference(projectId, new ProjectReference(loadedFileProjectId)); } } catch (Exception ex) { _logger.LogError($"{csxPath} will be ignored due to the following error:", ex); } } }
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; } }
public void Initalize(IConfiguration configuration) { Logger.LogInformation($"Detecting CSX files in '{Env.Path}'."); // Nothing to do if there are no CSX files var allCsxFiles = Directory.GetFiles(Env.Path, "*.csx", SearchOption.AllDirectories); if (allCsxFiles.Length == 0) { Logger.LogInformation("Could not find any CSX files"); return; } Context.RootPath = Env.Path; Logger.LogInformation($"Found {allCsxFiles.Length} CSX files."); // TODO: write and adapter to implement the new ScriptCs ILogProvider interface #pragma warning disable 0618 //script name is added here as a fake one (dir path not even a real file); this is OK though -> it forces MEF initialization var baseScriptServicesBuilder = new ScriptServicesBuilder(new ScriptConsole(), LogManager.GetCurrentClassLogger()) .LogLevel(LogLevel.Debug) .Cache(false) .Repl(false) .ScriptName(Env.Path) .ScriptEngine <NullScriptEngine>(); var scriptServices = baseScriptServicesBuilder.Build(); var scriptPacks = scriptServices.ScriptPackResolver.GetPacks().ToList(); var assemblyPaths = scriptServices.AssemblyResolver.GetAssemblyPaths(Env.Path); // Common usings and references Context.CommonUsings.UnionWith(ScriptExecutor.DefaultNamespaces); Context.CommonReferences.UnionWith(DotNetBaseReferences); Context.CommonReferences.UnionWith(scriptServices.MakeMetadataReferences(ScriptExecutor.DefaultReferences)); // ScriptCs defaults Context.CommonReferences.UnionWith(scriptServices.MakeMetadataReferences(assemblyPaths)); // nuget references if (scriptPacks != null && scriptPacks.Any()) { var scriptPackSession = new ScriptPackSession(scriptPacks, new string[0]); scriptPackSession.InitializePacks(); //script pack references Context.CommonReferences.UnionWith(scriptServices.MakeMetadataReferences(scriptPackSession.References)); //script pack usings Context.CommonUsings.UnionWith(scriptPackSession.Namespaces); Context.ScriptPacks.UnionWith(scriptPackSession.Contexts.Select(pack => pack.GetType().ToString())); } // Process each .CSX file foreach (var csxPath in allCsxFiles) { try { CreateCsxProject(csxPath, baseScriptServicesBuilder); } catch (Exception ex) { Logger.LogError($"{csxPath} will be ignored due to the following error:", ex.ToString()); Logger.LogError(ex.ToString()); Logger.LogError(ex.InnerException?.ToString() ?? "No inner exception."); } } }
public void ShouldResolveScriptServices(ScriptServices scriptServices, [Frozen] Mock<IRuntimeServices> runtimeServicesMock, ScriptServicesBuilder builder) { runtimeServicesMock.Setup(r => r.GetScriptServices()).Returns(scriptServices); builder.Overrides[typeof(IScriptEngine)] = null; builder.Build().ShouldEqual(scriptServices); }