public int Run() { try { Stream codeStream = LocateCode(); var formatter = new BinaryFormatter(); var reader = new ScriptEngine.Compiler.ModulePersistor(formatter); var moduleHandle = reader.Read(codeStream); var engine = new HostedScriptEngine(); var src = new BinaryCodeSource(moduleHandle); var process = engine.CreateProcess(this, moduleHandle, src); return process.Start(); } catch (ScriptInterruptionException e) { return e.ExitCode; } catch (Exception e) { this.ShowExceptionInfo(e); return 1; } }
public override int Execute() { Console.WriteLine("Make started..."); using (var exeStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("oscript.StandaloneRunner.exe")) using (var output = new FileStream(_exePath, FileMode.Create)) { exeStream.CopyTo(output); int offset = (int)output.Length; var engine = new HostedScriptEngine(); engine.Initialize(); var source = engine.Loader.FromFile(_codePath); var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); var persistor = new ScriptEngine.Compiler.ModulePersistor(formatter); var compiler = engine.GetCompilerService(); persistor.Save(compiler.CreateModule(source), output); byte[] signature = new byte[4] { 0x4f,0x53,0x4d,0x44 }; output.Write(signature, 0, signature.Length); using (var bw = new BinaryWriter(output)) { bw.Write(offset); } } Console.WriteLine("Make completed"); return 0; }
public override int Execute() { Console.WriteLine("Make started..."); using (var exeStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("oscript.StandaloneRunner.exe")) using (var output = new FileStream(_exePath, FileMode.Create)) { exeStream.CopyTo(output); int offset = (int)output.Length; var engine = new HostedScriptEngine(); engine.Initialize(); var source = engine.Loader.FromFile(_codePath); var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); var persistor = new ScriptEngine.Compiler.ModulePersistor(formatter); var compiler = engine.GetCompilerService(); persistor.Save(compiler.CreateModule(source), output); byte[] signature = new byte[4] { 0x4f, 0x53, 0x4d, 0x44 }; output.Write(signature, 0, signature.Length); using (var bw = new BinaryWriter(output)) { bw.Write(offset); } } Console.WriteLine("Make completed"); return(0); }
public override int Execute() { Output.WriteLine("Make started..."); using (var exeStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("oscript.StandaloneRunner.exe")) using (var output = new FileStream(_exePath, FileMode.Create)) { exeStream.CopyTo(output); int offset = (int)output.Length; var engine = new HostedScriptEngine(); engine.CustomConfig = ScriptFileHelper.CustomConfigPath(_codePath); engine.Initialize(); ScriptFileHelper.OnBeforeScriptRead(engine); var source = engine.Loader.FromFile(_codePath); var compiler = engine.GetCompilerService(); var entry = compiler.CreateModule(source); var embeddedContext = engine.GetUserAddedScripts(); using (var bw = new BinaryWriter(output)) { bw.Write(embeddedContext.Count() + 1); var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); var persistor = new ScriptEngine.Compiler.ModulePersistor(formatter); persistor.Save(new UserAddedScript() { Type = UserAddedScriptType.Module, Symbol = "$entry", Module = entry }, output); foreach (var item in embeddedContext) { persistor.Save(item, output); } byte[] signature = new byte[4] { 0x4f, 0x53, 0x4d, 0x44 }; output.Write(signature, 0, signature.Length); bw.Write(offset); } } Output.WriteLine("Make completed"); return(0); }
public int Run() { try { ScriptModuleHandle module; var engine = new HostedScriptEngine(); engine.Initialize(); using (Stream codeStream = LocateCode()) using (var binReader = new BinaryReader(codeStream)) { int modulesCount; modulesCount = binReader.ReadInt32(); var formatter = new BinaryFormatter(); var reader = new ScriptEngine.Compiler.ModulePersistor(formatter); var entry = reader.Read(codeStream); --modulesCount; while (modulesCount-- > 0) { var userScript = reader.Read(codeStream); engine.LoadUserScript(userScript); } module = entry.Module; } var src = new BinaryCodeSource(module); var process = engine.CreateProcess(this, module, src); return(process.Start()); } catch (ScriptInterruptionException e) { return(e.ExitCode); } catch (Exception e) { this.ShowExceptionInfo(e); return(1); } }
public int Run() { try { Stream codeStream = LocateCode(); var formatter = new BinaryFormatter(); var reader = new ScriptEngine.Compiler.ModulePersistor(formatter); var moduleHandle = reader.Read(codeStream); var engine = new HostedScriptEngine(); var src = new BinaryCodeSource(moduleHandle); var process = engine.CreateProcess(this, moduleHandle, src); return(process.Start()); } catch (Exception e) { Console.Write(e.ToString()); return(-1); } }
public int Run() { try { Stream codeStream = LocateCode(); var formatter = new BinaryFormatter(); var reader = new ScriptEngine.Compiler.ModulePersistor(formatter); var moduleHandle = reader.Read(codeStream); var engine = new HostedScriptEngine(); var src = new BinaryCodeSource(moduleHandle); var process = engine.CreateProcess(this, moduleHandle, src); return(process.Start()); } catch (ScriptInterruptionException e) { return(e.ExitCode); } catch (Exception e) { this.ShowExceptionInfo(e); return(1); } }
public static CompilerResults CompileAssemblyFromFile(CompilerParameters options, params string[] fileNames) { var result = new CompilerResults(new TempFileCollection()); var engine = new ScriptEngine.HostedScript.HostedScriptEngine(); engine.Initialize(); var compilerService = engine.GetCompilerService(); // TODO: Применить options var modules = new List <ScriptEngine.Environment.ScriptModuleHandle>(); var compiled = true; foreach (var fileName in fileNames) { var codeSource = engine.Loader.FromFile(fileName); try { var module = compilerService.CreateModule(codeSource); modules.Add(module); } catch (Exception exc) { var error = new CompilerError(fileName, 1, 1, "", exc.Message); result.Errors.Add(error); compiled = false; } } if (!compiled) { return(result); } var exePath = options.OutputAssembly; using (var output = new FileStream(exePath, FileMode.Create)) { using (var exeStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("OneScript.MonoBinding.StandaloneRunner.exe")) { exeStream.CopyTo(output); } var offset = (int)output.Length; var embeddedContext = engine.GetUserAddedScripts(); using (var modulesDataWriter = new BinaryWriter(output)) { modulesDataWriter.Write(embeddedContext.Count() + 1); var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); var persistor = new ScriptEngine.Compiler.ModulePersistor(formatter); persistor.Save(new ScriptEngine.UserAddedScript() { Type = ScriptEngine.UserAddedScriptType.Module, Symbol = "$entry", Module = modules[0] // TODO: Внятно определять точку входа }, output); foreach (var item in embeddedContext) { persistor.Save(item, output); } // Magic "OSMD" var signature = new byte[4] { 0x4f, 0x53, 0x4d, 0x44 }; output.Write(signature, 0, signature.Length); modulesDataWriter.Write(offset); } } result.PathToAssembly = exePath; result.Output.Add("Compile complete!"); return(result); }