private void CreateDump(Stream output) { var offset = (int)output.Length; var engine = new HostedScriptEngine { CustomConfig = ScriptFileHelper.CustomConfigPath(_codePath) }; engine.Initialize(); ScriptFileHelper.OnBeforeScriptRead(engine); var source = engine.Loader.FromFile(_codePath); var compiler = engine.GetCompilerService(); engine.SetGlobalEnvironment(new DoNothingHost(), source); var entry = compiler.Compile(source); var embeddedContext = engine.GetUserAddedScripts(); var templates = GlobalsManager.GetGlobalContext <TemplateStorage>(); var dump = new ApplicationDump(); dump.Scripts = new UserAddedScript[] { new UserAddedScript() { Image = entry, Symbol = "$entry", Type = UserAddedScriptType.Module } }.Concat(embeddedContext) .ToArray(); dump.Resources = templates.GetTemplates() .Select(SerializeTemplate) .ToArray(); using (var bw = new BinaryWriter(output)) { var serializer = new BinaryFormatter(); serializer.Serialize(output, dump); var signature = new byte[] { 0x4f, 0x53, 0x4d, 0x44 }; output.Write(signature, 0, signature.Length); bw.Write(offset); OutputToFile(output); } }
private void CreateExe() { using (var exeStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("oscript.StandaloneRunner.exe")) using (var output = new MemoryStream()) { exeStream?.CopyTo(output); var offset = (int)output.Length; var engine = new HostedScriptEngine { CustomConfig = ScriptFileHelper.CustomConfigPath(_codePath) }; engine.Initialize(); ScriptFileHelper.OnBeforeScriptRead(engine); var source = engine.Loader.FromFile(_codePath); var compiler = engine.GetCompilerService(); engine.SetGlobalEnvironment(new DoNothingHost(), source); var entry = compiler.CreateModule(source); var embeddedContext = engine.GetUserAddedScripts(); using (var bw = new BinaryWriter(output)) { var userAddedScripts = embeddedContext as IList <UserAddedScript> ?? embeddedContext.ToList(); bw.Write(userAddedScripts.Count + 1); var persistor = new ModulePersistor(); persistor.Save(new UserAddedScript { Type = UserAddedScriptType.Module, Symbol = "$entry", Module = entry }, output); foreach (var item in userAddedScripts) { persistor.Save(item, output); } var signature = new byte[] { 0x4f, 0x53, 0x4d, 0x44 }; output.Write(signature, 0, signature.Length); bw.Write(offset); OutputToFile(output); } } }
private void CreateDump(Stream output) { var offset = (int)output.Length; var engine = new HostedScriptEngine { CustomConfig = ScriptFileHelper.CustomConfigPath(_codePath) }; engine.Initialize(); ScriptFileHelper.OnBeforeScriptRead(engine); var source = engine.Loader.FromFile(_codePath); var compiler = engine.GetCompilerService(); engine.SetGlobalEnvironment(new DoNothingHost(), source); var entry = compiler.Compile(source); var embeddedContext = engine.GetUserAddedScripts(); using (var bw = new BinaryWriter(output)) { var userAddedScripts = embeddedContext as IList <UserAddedScript> ?? embeddedContext.ToList(); bw.Write(userAddedScripts.Count + 1); var persistor = new ModulePersistor(); persistor.Save(new UserAddedScript { Type = UserAddedScriptType.Module, Symbol = "$entry", Image = entry }, output); foreach (var item in userAddedScripts) { persistor.Save(item, output); } var signature = new byte[] { 0x4f, 0x53, 0x4d, 0x44 }; output.Write(signature, 0, signature.Length); bw.Write(offset); OutputToFile(output); } }
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 override int Execute() { var engine = new HostedScriptEngine { CustomConfig = ScriptFileHelper.CustomConfigPath(_path) }; engine.Initialize(); ScriptFileHelper.OnBeforeScriptRead(engine); var source = engine.Loader.FromFile(_path); var compiler = engine.GetCompilerService(); engine.SetGlobalEnvironment(new DoNothingHost(), source); var entry = compiler.Compile(source); var embeddedContext = engine.GetUserAddedScripts(); var serializer = new JsonSerializer(); var sb = new StringBuilder(); using (var textWriter = new StringWriter(sb)) { var writer = new JsonTextWriter(textWriter); writer.WriteStartArray(); WriteImage(new UserAddedScript { Type = UserAddedScriptType.Module, Symbol = "$entry", Image = entry }, writer, serializer); var userAddedScripts = embeddedContext as IList <UserAddedScript> ?? embeddedContext.ToList(); foreach (var item in userAddedScripts) { WriteImage(item, writer, serializer); } writer.WriteEndArray(); } string result = sb.ToString(); Output.WriteLine(result); return(0); }