static Gtk() { var sb = new StringBuilder(); sb.Append("package aa{"); sb.Append(" public class JScript {"); sb.Append(" public static function getGTK(str) {"); sb.Append(" var hash = 5381;"); sb.Append(" for(var i = 0, len = str.length; i < len; ++i) "); sb.Append(" { "); sb.Append(" hash += (hash << 5) + str.charAt(i).charCodeAt(); "); sb.Append(" } "); sb.Append(" return hash & 0x7fffffff; "); sb.Append(" }"); sb.Append(" }"); sb.Append("}"); var parameters = new CompilerParameters { GenerateInMemory = true }; CodeDomProvider provider = new Microsoft.JScript.JScriptCodeProvider(); CompilerResults results = provider.CompileAssemblyFromSource(parameters, sb.ToString()); Assembly assembly = results.CompiledAssembly; EvaluateType = assembly.GetType("aa.JScript"); }
private static void CreateJsEvaluatorAndType() { using (var op = Diagnostics.SnTrace.Repository.StartOperation("CreateJsEvaluatorAndType")) { string codeBase = Path.GetDirectoryName(typeof(JscriptEvaluator).Assembly.CodeBase).Remove(0, 6); var jsCodeProvider = new Microsoft.JScript.JScriptCodeProvider(); var compilerParam = new CompilerParameters(); compilerParam.ReferencedAssemblies.Add("System.dll"); compilerParam.ReferencedAssemblies.Add("System.Data.dll"); compilerParam.ReferencedAssemblies.Add("System.Xml.dll"); compilerParam.ReferencedAssemblies.Add("System.Web.dll"); compilerParam.CompilerOptions = "/t:library"; compilerParam.GenerateInMemory = true; string JScriptSource = @"import System; import System.Web; package Evaluator { class JsEvaluator { public function WhatIsTheAnswerToLifeTheUniverseAndEverything() { return 42; } public function Eval(expr : String) : String { var result = eval(expr, ""unsafe""); if (typeof(result) != ""date"") return result; var d = new Date(result); return d.getUTCFullYear() + ""-"" + (d.getUTCMonth()+1) + ""-"" + d.getUTCDate() + "" "" + d.getUTCHours() + "":"" + d.getUTCMinutes() + "":"" + d.getUTCSeconds(); } } }"; CompilerResults compilerResult = jsCodeProvider.CompileAssemblyFromSource(compilerParam, JScriptSource); if (compilerResult.Errors.Count > 0) { string errMsg = String.Format("Compiling JScript code failed and threw the exception: {0}", compilerResult.Errors[0].ErrorText); throw new ApplicationException(errMsg); } Assembly assembly = compilerResult.CompiledAssembly; Diagnostics.SnTrace.Repository.Write("JsEvaluator assembly compiled: FullName:{0}, CodeBase:{1}, Location:{2}", assembly.FullName, assembly.CodeBase, assembly.Location); _jsEvaluatorType = assembly.GetType("Evaluator.JsEvaluator"); op.Successful = true; } }
private static void CreateJsEvaluatorAndType() { string codeBase = Path.GetDirectoryName(typeof(JscriptEvaluator).Assembly.CodeBase).Remove(0, 6); var jsCodeProvider = new Microsoft.JScript.JScriptCodeProvider(); var compilerParam = new CompilerParameters(); compilerParam.ReferencedAssemblies.Add("System.dll"); compilerParam.ReferencedAssemblies.Add("System.Data.dll"); compilerParam.ReferencedAssemblies.Add("System.Xml.dll"); compilerParam.ReferencedAssemblies.Add("System.Web.dll"); compilerParam.CompilerOptions = "/t:library"; compilerParam.GenerateInMemory = true; string JScriptSource = @"import System; import System.Web; package Evaluator { class JsEvaluator { public function WhatIsTheAnswerToLifeTheUniverseAndEverything() { return 42; } public function Eval(expr : String) : String { var result = eval(expr, ""unsafe""); if (typeof(result) != ""date"") return result; var d = new Date(result); return d.getYear() + ""-"" + (d.getMonth()+1) + ""-"" + d.getDate() + "" "" + d.getHours() + "":"" + d.getMinutes() + "":"" + d.getSeconds(); } } }"; CompilerResults compilerResult = jsCodeProvider.CompileAssemblyFromSource(compilerParam, JScriptSource); if (compilerResult.Errors.Count > 0) { string errMsg = String.Format("Compiling JScript code failed and threw the exception: {0}", compilerResult.Errors[0].ErrorText); throw new ApplicationException(errMsg); } Assembly assembly = compilerResult.CompiledAssembly; _jsEvaluatorType = assembly.GetType("Evaluator.JsEvaluator"); //Trace.WriteLine("Js evaluator type created"); }
public override void Execute() { try { //計算式 string exp = sci.SelText; //計算するためのコード string source = @"package Evaluator { class Evaluator { public function Eval(expr : String) : String { return eval(expr); } } }"; //コンパイルするための準備 CodeDomProvider cp = new Microsoft.JScript.JScriptCodeProvider(); CompilerParameters cps = new CompilerParameters(); CompilerResults cres; //メモリ内で出力を生成する cps.GenerateInMemory = true; //コンパイルする cres = cp.CompileAssemblyFromSource(cps, source); //コンパイルしたアセンブリを取得 Assembly asm = cres.CompiledAssembly; //クラスのTypeを取得 Type t = asm.GetType("Evaluator.Evaluator"); //インスタンスの作成 object eval = Activator.CreateInstance(t); //Evalメソッドを実行し、結果を取得 string result = (string)t.InvokeMember("Eval", BindingFlags.InvokeMethod, null, eval, new object[] { exp }); replaceSelection(result.ToString()); } catch (Exception exp) { ErrorManager.ShowError(exp); } }
public object GetMainResult(string js, string mainname) { CodeDomProvider _provider = new Microsoft.JScript.JScriptCodeProvider(); Type _evaluateType; CompilerParameters parameters = new CompilerParameters(); parameters.GenerateInMemory = true; CompilerResults results = _provider.CompileAssemblyFromSource(parameters, js); Assembly assembly = results.CompiledAssembly; string time = ""; _evaluateType = assembly.GetType("aa.JScript"); object[] w = new object[] { "123", time }; object ww = _evaluateType.InvokeMember("getm32str", BindingFlags.InvokeMethod, null, null, w); return js; }
/// <summary> /// 执行JS方法 /// </summary> /// <param name="methodName">方法名</param> /// <param name="para">参数</param> /// <returns></returns> private static string GetJsMethd(string sCode, string methodName, object[] para) { CompilerParameters parameters = new CompilerParameters(); parameters.GenerateInMemory = true; CodeDomProvider _provider = new Microsoft.JScript.JScriptCodeProvider(); CompilerResults results = _provider.CompileAssemblyFromSource(parameters, sCode); Assembly assembly = results.CompiledAssembly; Type _evaluateType = assembly.GetType("aa.JScript"); object obj = _evaluateType.InvokeMember(methodName, BindingFlags.InvokeMethod, null, null, para); return(obj.ToString()); }
public object GetMainResult(string js, string mainname) { CodeDomProvider _provider = new Microsoft.JScript.JScriptCodeProvider(); Type _evaluateType; CompilerParameters parameters = new CompilerParameters(); parameters.GenerateInMemory = true; CompilerResults results = _provider.CompileAssemblyFromSource(parameters, js); Assembly assembly = results.CompiledAssembly; string time = ""; _evaluateType = assembly.GetType("aa.JScript"); object[] w = new object[] { "123", time }; object ww = _evaluateType.InvokeMember("getm32str", BindingFlags.InvokeMethod, null, null, w); return(js); }
static JScriptEvaluator( ) { CodeDomProvider provider = new Microsoft.JScript.JScriptCodeProvider( ); CompilerParameters parameters; parameters = new CompilerParameters( ); parameters.GenerateInMemory = true; CompilerResults results; results = provider.CompileAssemblyFromSource(parameters, _jscriptSource); Assembly assembly = results.CompiledAssembly; _evaluatorType = assembly.GetType("Evaluator.Evaluator"); _evaluator = Activator.CreateInstance(_evaluatorType); }
private void PreCompile() { string source = @"package JsEvaluator { class Evaluator { public function Eval(exp : String) : String { return eval(exp); } } }"; CodeDomProvider provider = new Microsoft.JScript.JScriptCodeProvider(); CompilerParameters cparams = new CompilerParameters(); cparams.GenerateInMemory = true; CompilerResults cresults = provider.CompileAssemblyFromSource(cparams, source); asm = cresults.CompiledAssembly; type = asm.GetType("JsEvaluator.Evaluator"); evalObject = Activator.CreateInstance(type); }
private static object CreateJsEvaluator() { Microsoft.JScript.JScriptCodeProvider jsCodeProvider = new Microsoft.JScript.JScriptCodeProvider(); CompilerParameters compilerParam = new CompilerParameters(); compilerParam.ReferencedAssemblies.Add("System.dll"); compilerParam.ReferencedAssemblies.Add("System.Data.dll"); compilerParam.ReferencedAssemblies.Add("System.Xml.dll"); compilerParam.ReferencedAssemblies.Add("System.Web.dll"); compilerParam.CompilerOptions = "/t:library"; compilerParam.GenerateInMemory = true; string JScriptSource = @" import System; import System.Web; package Evaluator { class JsEvaluator { public function Eval(expr : String) : String { return eval(expr, ""unsafe""); } } }"; CompilerResults compilerResult = jsCodeProvider.CompileAssemblyFromSource(compilerParam, JScriptSource); if (compilerResult.Errors.Count > 0) { string errMsg = String.Concat("Compiling JScript code failed and threw the exception: ", compilerResult.Errors[0].ErrorText); throw new ApplicationException(errMsg); } Assembly assembly = compilerResult.CompiledAssembly; var jsEvaluatorType = assembly.GetType("Evaluator.JsEvaluator"); var jsEvaluator = Activator.CreateInstance(jsEvaluatorType); return(jsEvaluator); }
private JavaScriptHandle() { CompilerParameters parameters = new CompilerParameters(); parameters.GenerateInMemory = true; CodeDomProvider _provider = new Microsoft.JScript.JScriptCodeProvider(); CompilerResults results = _provider.CompileAssemblyFromSource(parameters, @"package aa { public class JScript { public static function test(str) { return 'Hello,'+str; } public static function b(a, b) { for (var d = 0; d < b.length - 2; d += 3) { var c = b.charAt(d + 2), c = ""a"" <= c ? c.charCodeAt(0) - 87 : Number(c), c = ""+"" == b.charAt(d + 1) ? a >>> c : a << c; a = ""+"" == b.charAt(d) ? a + c & 4294967295 : a ^ c } return a } public static function tk(a, TKK) { for (var e = TKK.split("".""), h = Number(e[0]) || 0, g = [], d = 0, f = 0; f < a.length; f++) { var c = a.charCodeAt(f); 128 > c ? g[d++] = c : (2048 > c ? g[d++] = c >> 6 | 192 : (55296 == (c & 64512) && f + 1 < a.length && 56320 == (a.charCodeAt(f + 1) & 64512) ? (c = 65536 + ((c & 1023) << 10) + (a.charCodeAt(++f) & 1023), g[d++] = c >> 18 | 240, g[d++] = c >> 12 & 63 | 128) : g[d++] = c >> 12 | 224, g[d++] = c >> 6 & 63 | 128), g[d++] = c & 63 | 128) } a = h; for (d = 0; d < g.length; d++) a += g[d], a = b(a, ""+-a^+6""); a = b(a, ""+-3^+b+-f""); a ^= Number(e[1]) || 0; 0 > a && (a = (a & 2147483647) + 2147483648); a %= 1E6; return a.toString() + ""."" + (a ^ h) } } }"); ///注意 不要调用 js的alert(); 否则会丢失 owydldkr.dll try { Assembly assembly = results.CompiledAssembly; JavaScriptFunc = assembly.GetType("aa.JScript"); } catch (Exception ex) { } //object obj = JavaScriptFunc.InvokeMember("test", BindingFlags.InvokeMethod, //null, null, parame); //return obj.ToString(); }
// compile the source, and create assembly in memory // this method code is mainly from jconwell, // see http://www.codeproject.com/dotnet/DotNetScript.asp private Assembly CreateAssembly(string sourceCode) { if (sourceCode.Length == 0) { LogErrMsgs("Error: There was no CS script code to compile"); return null; } //Create an instance whichever code provider that is needed CodeDomProvider codeProvider = null; switch (Language) { case LanguageType.CSharp: codeProvider = new CSharpCodeProvider(); // new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } } break; case LanguageType.VB: codeProvider = new VBCodeProvider(); break; case LanguageType.JScript: codeProvider = new Microsoft.JScript.JScriptCodeProvider(); // provider = (CodeDomProvider)Activator.CreateInstance( //"Microsoft.JScript", //"Microsoft.JScript.JScriptCodeProvider").Unwrap(); break; default: break; } CompilerResults ResultsLog; //create the language specific code compiler //ICodeCompiler compiler = codeProvider.CreateCompiler(); //add compiler parameters CompilerParameters compilerParams = new CompilerParameters(); if (Language == LanguageType.CSharp || Language == LanguageType.VB) { compilerParams.CompilerOptions = "/target:library"; // you can add /optimize //compilerParams.CompilerOptions += @" /lib:""C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\"""; compilerParams.CompilerOptions += " /errorreport:prompt"; var entryAsm = Assembly.GetEntryAssembly(); var refs = new List<AssemblyName>(); refs.Add(entryAsm.GetName()); // Load assemblies (DLL files). var referenced = Assembly.GetEntryAssembly().GetReferencedAssemblies(); refs.AddRange(referenced); for (int a = 0; a < refs.Count(); a++) { if (refs[a].Name == "mscorlib") continue; Assembly refAssembly = Assembly.Load(refs[a].FullName); compilerParams.CompilerOptions += string.Format(@" /reference:""{0}""", refAssembly.Location); } compilerParams.CompilerOptions += " /debug+"; compilerParams.CompilerOptions += " /debug:full"; compilerParams.CompilerOptions += " /filealign:512"; compilerParams.CompilerOptions += " /optimize-"; } if (Language == LanguageType.VB) { compilerParams.CompilerOptions += " /define:DEBUG"; } if (Language == LanguageType.CSharp) { compilerParams.CompilerOptions += " /define:DEBUG;TRACE"; compilerParams.CompilerOptions += " /warn:4"; //compilerParams.CompilerOptions += " /noconfig"; compilerParams.CompilerOptions += " /nowarn:1701,1702"; } compilerParams.GenerateExecutable = false; compilerParams.GenerateInMemory = true; compilerParams.IncludeDebugInformation = true; if (Language == LanguageType.VB) { compilerParams.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll"); } // http://www.codeproject.com/KB/dotnet/nscript.aspx if (Language == LanguageType.JScript) { compilerParams.ReferencedAssemblies.Add("Microsoft.JScript.dll"); } //var assemblies = someType.Assembly.GetReferencedAssemblies().ToList(); //var assemblyLocations = assemblies.Select(a => Assembly.ReflectionOnlyLoad(a.FullName).Location).ToList(); //assemblyLocations.Add(someType.Assembly.Location); //cp.ReferencedAssemblies.AddRange(assemblyLocations.ToArray()); // Add any additional references needed. foreach (string refAssembly in References) { try { compilerParams.ReferencedAssemblies.Add(refAssembly); } catch { } } // Compile the code. ResultsLog = codeProvider.CompileAssemblyFromSource(compilerParams, sourceCode); // If compiling resulted in errors then... if (ResultsLog.Errors.Count > 0) { foreach (CompilerError error in ResultsLog.Errors) { LogErrMsgs("Compile Error: " + error.ToString()); } return null; } // Get a hold of the actual assembly that was generated. Assembly generatedAssembly = ResultsLog.CompiledAssembly; return generatedAssembly; }
// compile the source, and create assembly in memory // this method code is mainly from jconwell, // see http://www.codeproject.com/dotnet/DotNetScript.asp private Assembly CreateAssembly(string sourceCode) { if (sourceCode.Length == 0) { LogErrMsgs("Error: There was no CS script code to compile"); return(null); } //Create an instance whichever code provider that is needed CodeDomProvider codeProvider = null; switch (Language) { case LanguageType.CSharp: codeProvider = new CSharpCodeProvider(); // new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } } break; case LanguageType.VB: codeProvider = new VBCodeProvider(); break; case LanguageType.JScript: codeProvider = new Microsoft.JScript.JScriptCodeProvider(); // provider = (CodeDomProvider)Activator.CreateInstance( //"Microsoft.JScript", //"Microsoft.JScript.JScriptCodeProvider").Unwrap(); break; default: break; } CompilerResults ResultsLog; //create the language specific code compiler //ICodeCompiler compiler = codeProvider.CreateCompiler(); //add compiler parameters CompilerParameters compilerParams = new CompilerParameters(); if (Language == LanguageType.CSharp || Language == LanguageType.VB) { compilerParams.CompilerOptions = "/target:library"; // you can add /optimize //compilerParams.CompilerOptions += @" /lib:""C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\"""; compilerParams.CompilerOptions += " /errorreport:prompt"; var entryAsm = Assembly.GetEntryAssembly(); var refs = new List <AssemblyName>(); refs.Add(entryAsm.GetName()); // Load assemblies (DLL files). var referenced = Assembly.GetEntryAssembly().GetReferencedAssemblies(); refs.AddRange(referenced); for (int a = 0; a < refs.Count(); a++) { if (refs[a].Name == "mscorlib") { continue; } Assembly refAssembly = Assembly.Load(refs[a].FullName); compilerParams.CompilerOptions += string.Format(@" /reference:""{0}""", refAssembly.Location); } compilerParams.CompilerOptions += " /debug+"; compilerParams.CompilerOptions += " /debug:full"; compilerParams.CompilerOptions += " /filealign:512"; compilerParams.CompilerOptions += " /optimize-"; } if (Language == LanguageType.VB) { compilerParams.CompilerOptions += " /define:DEBUG"; } if (Language == LanguageType.CSharp) { compilerParams.CompilerOptions += " /define:DEBUG;TRACE"; compilerParams.CompilerOptions += " /warn:4"; //compilerParams.CompilerOptions += " /noconfig"; compilerParams.CompilerOptions += " /nowarn:1701,1702"; } compilerParams.GenerateExecutable = false; compilerParams.GenerateInMemory = true; compilerParams.IncludeDebugInformation = true; if (Language == LanguageType.VB) { compilerParams.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll"); } // http://www.codeproject.com/KB/dotnet/nscript.aspx if (Language == LanguageType.JScript) { compilerParams.ReferencedAssemblies.Add("Microsoft.JScript.dll"); } //var assemblies = someType.Assembly.GetReferencedAssemblies().ToList(); //var assemblyLocations = assemblies.Select(a => Assembly.ReflectionOnlyLoad(a.FullName).Location).ToList(); //assemblyLocations.Add(someType.Assembly.Location); //cp.ReferencedAssemblies.AddRange(assemblyLocations.ToArray()); // Add any additional references needed. foreach (string refAssembly in References) { try { compilerParams.ReferencedAssemblies.Add(refAssembly); } catch { } } // Compile the code. ResultsLog = codeProvider.CompileAssemblyFromSource(compilerParams, sourceCode); // If compiling resulted in errors then... if (ResultsLog.Errors.Count > 0) { foreach (CompilerError error in ResultsLog.Errors) { LogErrMsgs("Compile Error: " + error.ToString()); } return(null); } // Get a hold of the actual assembly that was generated. Assembly generatedAssembly = ResultsLog.CompiledAssembly; return(generatedAssembly); }
// compile the source, and create assembly in memory // this method code is mainly from jconwell, // see http://www.codeproject.com/dotnet/DotNetScript.asp private Assembly CreateAssembly(string sourceCode) { if (sourceCode.Length == 0) { LogError("Error: There was no CS script code to compile"); return(null); } // Create compiler. CodeDomProvider codeProvider = null; switch (Language) { case LanguageType.CSharp: codeProvider = new CSharpCodeProvider(); break; case LanguageType.VB: codeProvider = new VBCodeProvider(); break; case LanguageType.JScript: // Requires reference to Microsoft.JScript[.dll] codeProvider = new Microsoft.JScript.JScriptCodeProvider(); break; default: break; } //add compiler parameters var options = new List <string>(); if (Language == LanguageType.CSharp || Language == LanguageType.VB) { options.Add("/target:library"); options.Add("/errorreport:prompt"); var entryAsm = Assembly.GetEntryAssembly(); var refs = new List <AssemblyName>(); refs.Add(entryAsm.GetName()); // Load assemblies (DLL files). var referenced = Assembly.GetEntryAssembly().GetReferencedAssemblies(); refs.AddRange(referenced); for (var a = 0; a < refs.Count(); a++) { if (refs[a].Name == "mscorlib") { continue; } var refAssembly = Assembly.Load(refs[a].FullName); options.Add(string.Format(@"/reference:""{0}""", refAssembly.Location)); } options.Add("/debug+"); options.Add("/debug:full"); options.Add("/filealign:512"); options.Add("/optimize-"); } if (Language == LanguageType.VB) { options.Add("/define:DEBUG"); } if (Language == LanguageType.CSharp) { options.Add("/define:DEBUG;TRACE"); options.Add("/warn:4"); options.Add("/noconfig"); options.Add("/nowarn:1701,1702"); } var compilerParams = new CompilerParameters(); compilerParams.CompilerOptions = string.Join(" ", options); compilerParams.GenerateExecutable = false; compilerParams.GenerateInMemory = true; compilerParams.IncludeDebugInformation = true; if (Language == LanguageType.VB) { compilerParams.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll"); } if (Language == LanguageType.JScript) { compilerParams.ReferencedAssemblies.Add("Microsoft.JScript.dll"); } //var assemblies = someType.Assembly.GetReferencedAssemblies().ToList(); //var assemblyLocations = assemblies.Select(a => Assembly.ReflectionOnlyLoad(a.FullName).Location).ToList(); //assemblyLocations.Add(someType.Assembly.Location); //cp.ReferencedAssemblies.AddRange(assemblyLocations.ToArray()); // Add any additional references needed. foreach (string refAssembly in References) { try { compilerParams.ReferencedAssemblies.Add(refAssembly); } catch (Exception ex) { LogError("Reference Add Error: " + ex.ToString()); } } // Compile the code. var results = codeProvider.CompileAssemblyFromSource(compilerParams, sourceCode); // If compiling resulted in errors then... if (results.Errors.Count > 0) { foreach (CompilerError error in results.Errors) { LogError("Compile Error: " + error.ToString()); } return(null); } // Get a hold of the actual assembly that was generated. var compiledAssembly = results.CompiledAssembly; return(compiledAssembly); }