public bool CompileAndRun(string code) { try { var codeDriver = (CodeDriver)Activator.CreateInstance(typeof(CodeDriver)); if (MainForm.Instance.PulseCheckbox.Checked) { Pulsator.Pulse(PulseFlags.All); } //FateManager.Update(); return(codeDriver.CompileAndRun(code)); } catch (Exception ex) { RebornConsole.Log(Colors.Red, ex.ToString()); Logging.Write(ex); return(false); } }
private void CompileAndRun() { if (RebornConsoleSettings.Instance.TabIndex == 0) { // C# try { btnCompile.BackColor = RebornConsole.CodeDriver.CompileAndRun(csharpCode.Text) ? System.Drawing.Color.White : System.Drawing.Color.Red; RebornConsoleSettings.Instance.CSharpSniplets[RebornConsoleSettings.Instance.CSharpSelectedIndex] = csharpCode.Text; } catch (Exception ex) { RebornConsole.Log(Colors.Red, ex.ToString()); } } else { //LUA try { Pulsator.Pulse(PulseFlags.All); var tmp = luaCode.Text; if (tmp.Contains("{T}")) { tmp = tmp.Replace("{T}", ff14bot.Core.Target.LuaString); } foreach (var value in Lua.GetReturnValues(tmp)) { RebornConsole.Log(value); } } catch (Exception ex) { RebornConsole.Log(Colors.Red, ex.ToString()); } } }
// returns true if compiled sucessfully public bool CompileAndRun(string input) { if (Input != input || FrameLockChecked != MainForm.Instance.FrameLockCheckBox.Checked) { Input = input; FrameLockChecked = MainForm.Instance.FrameLockCheckBox.Checked; using (CSharpCodeProvider provider = CodeProvider.Value) { CompilerParameters options = new CompilerParameters(); // most recent assembly Assembly myAssembly = AppDomain.CurrentDomain.GetAssemblies() .Where(a => a.GetName().Name.Contains(RebornConsole.Instance.Name)) .OrderByDescending(a => new FileInfo(a.Location).CreationTime).FirstOrDefault(); options.ReferencedAssemblies.Add(myAssembly.Location); foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) { if (!asm.GetName().Name.Contains(RebornConsole.Instance.Name) && !asm.IsDynamic) { options.ReferencedAssemblies.Add(asm.Location); } } options.GenerateExecutable = false; options.IncludeDebugInformation = true; options.TempFiles = new TempFileCollection(RebornConsole.TempFolder, false); options.OutputAssembly = string.Format("{0}\\CodeAssembly{1:N}.dll", RebornConsole.TempFolder, Guid.NewGuid()); //options.CompilerOptions = "/d:DEBUG /optimize /unsafe"; options.CompilerOptions = "/optimize /unsafe"; var sb = new StringBuilder(); sb.Append(MainForm.Instance.FrameLockCheckBox.Checked ? PrefixWithFrameLock : Prefix); sb.Append(input); sb.Append(Postfix); Results = provider.CompileAssemblyFromSource(options, sb.ToString()); } } if (Results.Errors.HasErrors) { var errorMessage = new StringBuilder(); var errLineOffset = Prefix.Count(c => c == '\n'); foreach (CompilerError error in Results.Errors) { errorMessage.AppendFormat("{0}) {1}\n", error.Line - errLineOffset, error.ErrorText); } RebornConsole.Log(Colors.Red, errorMessage.ToString()); return(false); } Type driverType = Results.CompiledAssembly.GetType("Driver"); try { driverType.InvokeMember("Run", BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public, null, null, null); } catch (Exception e) { RebornConsole.Log(Colors.OrangeRed, e.ToString()); } return(true); }