public static JavaScriptEngineSwitcher.Core.IJsEngine CreateEngine() { var engineSwitcher = JavaScriptEngineSwitcher.Core.JsEngineSwitcher.Current; engineSwitcher.EngineFactories.Add(new JavaScriptEngineSwitcher.ChakraCore.ChakraCoreJsEngineFactory()); engineSwitcher.DefaultEngineName = JavaScriptEngineSwitcher.ChakraCore.ChakraCoreJsEngine.EngineName; JavaScriptEngineSwitcher.Core.IJsEngine engine = JavaScriptEngineSwitcher.Core.JsEngineSwitcher.Current.CreateDefaultEngine(); // C#中设置JS变量值 engine.SetVariableValue("pi", 3.1415926); // C#向JS注入类型 //engine.EmbedHostType("Console", typeof(JsConsole)); // C#向JS注入对象 engine.EmbedHostObject("console", new JsConsole()); engine.EmbedHostObject("math", new JsMath()); engine.EmbedHostObject("file", new JsFile()); //engine.EmbedHostObject("File", typeof(JsFile)); engine.SetVariableValue("jsEngineVersion", engine.Version); engine.Execute("function version(){ \r\n return jsEngineVersion; \r\n}"); engine.Execute("function print(arg){ \r\n console.log(arg); \r\n}"); return(engine); }
public static void Init(string[] args) { // ½âÎö²ÎÊý // - Console.WriteLine($"command arguments: '{string.Join("','", args)}'"); Console.WriteLine($"run dic: {AppContext.BaseDirectory}"); if (args.Length > 0) { switch (args[0]) { case "run": if (args.Length > 1) { var arg = args[1]; if (arg == "js") { if (args.Length > 2) { var code = args[2]; using (JavaScriptEngineSwitcher.Core.IJsEngine engine = JavaScript.JsEngine.CreateEngine()) { Console.WriteLine($"out:{"".PadRight(40, '-')}"); engine.Execute(code); Console.WriteLine($"out:{"".PadRight(40, '-')}"); } } } var path = System.IO.Path.GetFullPath(arg); Console.WriteLine($"source code file: {path}"); if (System.IO.File.Exists(path)) { var sourceCode = System.IO.File.ReadAllText(path); Console.WriteLine($"src:{"".PadRight(40, '-')}"); Console.WriteLine(sourceCode); Console.WriteLine($"src:{"".PadRight(40, '-')}"); if (System.IO.Path.HasExtension(".ws")) { ILexer lexer = new Lexer(); } if (System.IO.Path.HasExtension(".js")) { using (JavaScriptEngineSwitcher.Core.IJsEngine engine = JavaScript.JsEngine.CreateEngine()) { Console.WriteLine($"out:{"".PadRight(40, '-')}"); // Ö´ÐÐJS½Å±¾Îļþ engine.ExecuteFile(path); //engine.Execute("var a=1+3;if(1)a=5;TestA.Name=a"); Console.WriteLine($"out:{"".PadRight(40, '-')}"); } } #region << ¶¯Ì¬±àÒëC#´úÂë >> // if (System.IO.Path.HasExtension(".cs")) // { // CSharpCodeProvider provider = new CSharpCodeProvider(); // ICodeCompiler compiler = provider.CreateCompiler(); // CompilerParameters parameters = new CompilerParameters(); // parameters.ReferencedAssemblies.Add("System.dll"); // parameters.GenerateExecutable = false; // parameters.GenerateInMemory = true; // CompilerResults cr = compiler.CompileAssemblyFromSource(parameters, sourceCode); // if(cr.Errors.HasErrors){ // Console.WriteLine("±àÒë´íÎó£º"); // Console.WriteLine(string.Join(Environment.NewLine // , cr.Errors.Cast<CompilerError>() // .Select(err => err.ErrorText))); // } // else { // Assembly assembly = cr.CompiledAssembly; // var type = assembly.GetType("Program"); // // type.InvokeMember() // } // } #endregion } } break; default: break; } } }
public void Execute(string code) { CheckDisposed(); _engine.Execute(code); }