// public ���\�b�h public void CompileFile(string filePath) { if(!File.Exists(filePath)){ throw new Exception("�t�@�C��������܂��� : " + filePath); } CodeDomProvider myCompiler; string ext = Path.GetExtension(filePath).ToLower(); switch(ext){ case JsExt: myCompiler = new Microsoft.JScript.JScriptCodeProvider(); break; case CsExt: myCompiler = new Microsoft.CSharp.CSharpCodeProvider(); break; case VbExt: myCompiler = new Microsoft.VisualBasic.VBCodeProvider(); break; default: throw new Exception("���Ή��̃t�@�C���g���q�ł�: " + filePath); } myPluginDllPath = mySetting.TemplateDir + Path.GetFileNameWithoutExtension(filePath) + ".dll"; string code = Util.LoadFile(filePath); CompilerParameters cp = new CompilerParameters(); cp.GenerateExecutable = true; cp.OutputAssembly = myPluginDllPath; CompilerResults cr = myCompiler.CompileAssemblyFromSource(cp, code); foreach(string s in cr.Output){ Console.WriteLine(s); } myCompiler.Dispose(); }
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"); }
/// <summary> /// Generates an Assembly from a script filename /// </summary> /// <param name="filename">The filename of the script</param> /// <param name="references">Assembly references for the script</param> /// <returns>The generated assembly</returns> public Assembly CreateAssembly(string filename, IList references) { // ensure that compilerErrors is null compilerErrors = null; string extension = Path.GetExtension(filename); // Select the correct CodeDomProvider based on script file extension CodeDomProvider codeProvider; switch (extension) { case ".cs": codeProvider = new Microsoft.CSharp.CSharpCodeProvider(); break; case ".vb": codeProvider = new Microsoft.VisualBasic.VBCodeProvider(); break; case ".js": codeProvider = new Microsoft.JScript.JScriptCodeProvider(); break; default: throw new InvalidOperationException("Script files must have a .cs, .vb, or .js extension, for C#, Visual Basic.NET, or JScript respectively."); } //ICodeCompiler compiler = codeProvider.CreateCompiler(); // Set compiler parameters var compilerParams = new CompilerParameters { CompilerOptions = "/target:library /optimize", GenerateExecutable = false, GenerateInMemory = true, IncludeDebugInformation = false }; compilerParams.ReferencedAssemblies.Add("mscorlib.dll"); compilerParams.ReferencedAssemblies.Add("System.dll"); // Add custom references foreach (string reference in references.Cast <string>().Where(reference => !compilerParams.ReferencedAssemblies.Contains(reference))) { compilerParams.ReferencedAssemblies.Add(reference); } // Do the compilation CompilerResults results = codeProvider.CompileAssemblyFromFile(compilerParams, filename); //Do we have any compiler errors if (results.Errors.Count > 0) { compilerErrors = results.Errors; throw new Exception( "Compiler error(s) encountered and saved to AssemblyFactory.CompilerErrors"); } Assembly createdAssembly = results.CompiledAssembly; return(createdAssembly); }
public void BeginCompile(string nameSpace) { provider = new Microsoft.JScript.JScriptCodeProvider(); unit = new CodeCompileUnit(); ns = new CodeNamespace(nameSpace); unit.Namespaces.Add(ns); }
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; } }
/// <summary> /// Generates an Assembly from a script filename /// </summary> /// <param name="filename">The filename of the script</param> /// <param name="references">Assembly references for the script</param> /// <returns>The generated assembly</returns> public Assembly CreateAssembly(string filename, IList references) { // ensure that compilerErrors is null compilerErrors = null; string extension = Path.GetExtension(filename); // Select the correct CodeDomProvider based on script file extension CodeDomProvider codeProvider; switch (extension) { case ".cs": codeProvider = new Microsoft.CSharp.CSharpCodeProvider(); break; case ".vb": codeProvider = new Microsoft.VisualBasic.VBCodeProvider(); break; case ".js": codeProvider = new Microsoft.JScript.JScriptCodeProvider(); break; default: throw new InvalidOperationException("Script files must have a .cs, .vb, or .js extension, for C#, Visual Basic.NET, or JScript respectively."); } //ICodeCompiler compiler = codeProvider.CreateCompiler(); // Set compiler parameters var compilerParams = new CompilerParameters { CompilerOptions = "/target:library /optimize", GenerateExecutable = false, GenerateInMemory = true, IncludeDebugInformation = false }; compilerParams.ReferencedAssemblies.Add("mscorlib.dll"); compilerParams.ReferencedAssemblies.Add("System.dll"); // Add custom references foreach (string reference in references.Cast<string>().Where(reference => !compilerParams.ReferencedAssemblies.Contains(reference))) { compilerParams.ReferencedAssemblies.Add(reference); } // Do the compilation CompilerResults results = codeProvider.CompileAssemblyFromFile(compilerParams, filename); //Do we have any compiler errors if (results.Errors.Count > 0) { compilerErrors = results.Errors; throw new Exception( "Compiler error(s) encountered and saved to AssemblyFactory.CompilerErrors"); } Assembly createdAssembly = results.CompiledAssembly; return createdAssembly; }
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); }
/// <summary> /// Generates an Assembly from a script filename /// </summary> /// <param name="filename">The filename of the script</param> /// <param name="references">Assembly references for the script</param> /// <returns>The generated assembly</returns> public Assembly CreateAssembly(string filename, IList references) { // ensure that compilerErrors is null compilerErrors = null; string extension = Path.GetExtension(filename); // Select the correct CodeDomProvider based on script file extension CodeDomProvider codeProvider = null; switch (extension) { case ".cs": codeProvider = new Microsoft.CSharp.CSharpCodeProvider(); break; case ".vb": codeProvider = new Microsoft.VisualBasic.VBCodeProvider(); break; case ".js": codeProvider = new Microsoft.JScript.JScriptCodeProvider(); break; default: throw new InvalidOperationException("Script files must have a .cs, .vb, or .js extension, for C#, Visual Basic.NET, or JScript respectively."); } // Set compiler parameters CompilerParameters compilerParams = new CompilerParameters(); compilerParams.CompilerOptions = "/target:library /optimize"; compilerParams.GenerateExecutable = false; compilerParams.GenerateInMemory = true; compilerParams.IncludeDebugInformation = false; compilerParams.ReferencedAssemblies.Add("mscorlib.dll"); compilerParams.ReferencedAssemblies.Add("System.dll"); compilerParams.ReferencedAssemblies.Add("Laugris.Sage.dll"); compilerParams.ReferencedAssemblies.Add("Krento.RollingStones.dll"); compilerParams.ReferencedAssemblies.Add("Krento.Toys.dll"); compilerParams.ReferencedAssemblies.Add("System.Drawing.dll"); compilerParams.ReferencedAssemblies.Add("System.Windows.Forms.dll"); compilerParams.ReferencedAssemblies.Add("System.Design.dll"); compilerParams.ReferencedAssemblies.Add("System.Data.dll"); compilerParams.ReferencedAssemblies.Add("System.XML.dll"); compilerParams.ReferencedAssemblies.Add("System.Drawing.Design.dll"); compilerParams.ReferencedAssemblies.Add("System.Web.dll"); compilerParams.ReferencedAssemblies.Add("System.Web.Services.dll"); if (references != null) { // Add custom references foreach (string reference in references) { if (!compilerParams.ReferencedAssemblies.Contains(reference)) { compilerParams.ReferencedAssemblies.Add(reference); } } } // Do the compilation CompilerResults results = codeProvider.CompileAssemblyFromFile(compilerParams, filename); //Do we have any compiler errors if (results.Errors.Count > 0) { compilerErrors = results.Errors; throw new Exception( "Compiler error(s) encountered and saved to AssemblyFactory.CompilerErrors"); } Assembly createdAssembly = results.CompiledAssembly; return(createdAssembly); }
// 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); }
private static void GenerateCode(Options options) { var packageTransform = new NMF.Models.Meta.Meta2ClassesTransformation(); var stopWatch = new Stopwatch(); packageTransform.ForceGeneration = options.Force; packageTransform.CreateOperations = options.Operations; packageTransform.DefaultNamespace = options.OverallNamespace; Dictionary<Uri, string> mappings = null; if (options.NamespaceMappings != null && options.NamespaceMappings.Count > 0) { mappings = new Dictionary<Uri, string>(); foreach (var mapping in options.NamespaceMappings) { if (string.IsNullOrEmpty(mapping)) continue; var lastIdx = mapping.LastIndexOf('='); if (lastIdx == -1) { Console.WriteLine("Namespace mapping {0} is missing required separator =", mapping); continue; } Uri uri; if (!Uri.TryCreate(mapping.Substring(0, lastIdx), UriKind.Absolute, out uri)) { uri = new Uri(mapping.Substring(0, lastIdx), UriKind.Relative); } mappings.Add(uri, mapping.Substring(lastIdx + 1)); } } var metaPackage = LoadPackageFromFiles(options.InputFiles, options.OverallNamespace, mappings); if (options.Uri != null) { Uri uri; if (Uri.TryCreate(options.Uri, UriKind.Absolute, out uri)) { metaPackage.Uri = uri; } else { Console.Error.WriteLine("The provided string {0} could not be parsed as an absolute URI.", options.Uri); } } if (metaPackage.Uri == null) { Console.Error.WriteLine("Warning: There is no base Uri for the provided metamodels. Some features of the generated code will be disabled."); } var model = metaPackage.Model; if (model == null) { model = new Model(); model.RootElements.Add(metaPackage); } model.ModelUri = metaPackage.Uri; if (options.NMeta != null) { using (var fs = File.Create(options.NMeta)) { MetaRepository.Instance.Serializer.Serialize(model, fs); } } stopWatch.Start(); var compileUnit = TransformationEngine.Transform<INamespace, CodeCompileUnit>(metaPackage, options.Parallel ? (ITransformationEngineContext)new ParallelTransformationContext(packageTransform) : new TransformationContext(packageTransform)); stopWatch.Stop(); Console.WriteLine("Operation took {0}ms", stopWatch.Elapsed.TotalMilliseconds); CodeDomProvider generator = null; switch (options.Language) { case SupportedLanguage.CS: generator = new Microsoft.CSharp.CSharpCodeProvider(); break; case SupportedLanguage.VB: generator = new Microsoft.VisualBasic.VBCodeProvider(); break; case SupportedLanguage.CPP: generator = new Microsoft.VisualC.CppCodeProvider(); break; case SupportedLanguage.JS: generator = new Microsoft.JScript.JScriptCodeProvider(); break; default: Console.WriteLine("Unknown language detected. Falling back to default C#"); generator = new Microsoft.CSharp.CSharpCodeProvider(); break; } var genOptions = new System.CodeDom.Compiler.CodeGeneratorOptions() { BlankLinesBetweenMembers = true, VerbatimOrder = false, ElseOnClosing = false, BracingStyle = "C", IndentString = " " }; if (options.UseFolders) { foreach (var file in MetaFacade.SplitCompileUnit(compileUnit)) { var fileInfo = new FileInfo(Path.Combine(options.OutputFile, file.Key) + "." + generator.FileExtension); CheckDirectoryExists(fileInfo.Directory); using (var fs = fileInfo.Create()) { using (var sw = new StreamWriter(fs)) { generator.GenerateCodeFromCompileUnit(file.Value, sw, genOptions); } } } } else { using (var sw = new StreamWriter(options.OutputFile)) { generator.GenerateCodeFromCompileUnit(compileUnit, sw, genOptions); } } Console.WriteLine("Code generated successfully!"); }
// 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); }
private static void GenerateCode(Options options) { var packageTransform = new NMF.Models.Meta.Meta2ClassesTransformation(); var stopWatch = new Stopwatch(); packageTransform.ForceGeneration = options.Force; packageTransform.CreateOperations = options.Operations; packageTransform.DefaultNamespace = options.OverallNamespace; Dictionary <Uri, string> mappings = null; if (options.NamespaceMappings != null && options.NamespaceMappings.Count > 0) { mappings = new Dictionary <Uri, string>(); foreach (var mapping in options.NamespaceMappings) { if (string.IsNullOrEmpty(mapping)) { continue; } var lastIdx = mapping.LastIndexOf('='); if (lastIdx == -1) { Console.WriteLine("Namespace mapping {0} is missing required separator =", mapping); continue; } Uri uri; if (!Uri.TryCreate(mapping.Substring(0, lastIdx), UriKind.Absolute, out uri)) { uri = new Uri(mapping.Substring(0, lastIdx), UriKind.Relative); } mappings.Add(uri, mapping.Substring(lastIdx + 1)); } } var metaPackage = LoadPackageFromFiles(options.InputFiles, options.OverallNamespace, mappings); if (options.Uri != null) { Uri uri; if (Uri.TryCreate(options.Uri, UriKind.Absolute, out uri)) { metaPackage.Uri = uri; } else { Console.Error.WriteLine("The provided string {0} could not be parsed as an absolute URI.", options.Uri); } } if (metaPackage.Uri == null) { Console.Error.WriteLine("Warning: There is no base Uri for the provided metamodels. Some features of the generated code will be disabled."); } var model = metaPackage.Model; if (model == null) { model = new Model(); model.RootElements.Add(metaPackage); } model.ModelUri = metaPackage.Uri; if (options.NMeta != null) { using (var fs = File.Create(options.NMeta)) { MetaRepository.Instance.Serializer.Serialize(model, fs); } } stopWatch.Start(); var compileUnit = TransformationEngine.Transform <INamespace, CodeCompileUnit>(metaPackage, options.Parallel ? (ITransformationEngineContext) new ParallelTransformationContext(packageTransform) : new TransformationContext(packageTransform)); stopWatch.Stop(); Console.WriteLine("Operation took {0}ms", stopWatch.Elapsed.TotalMilliseconds); CodeDomProvider generator = null; switch (options.Language) { case SupportedLanguage.CS: generator = new Microsoft.CSharp.CSharpCodeProvider(); break; case SupportedLanguage.VB: generator = new Microsoft.VisualBasic.VBCodeProvider(); break; case SupportedLanguage.CPP: generator = new Microsoft.VisualC.CppCodeProvider(); break; case SupportedLanguage.JS: generator = new Microsoft.JScript.JScriptCodeProvider(); break; default: Console.WriteLine("Unknown language detected. Falling back to default C#"); generator = new Microsoft.CSharp.CSharpCodeProvider(); break; } var genOptions = new System.CodeDom.Compiler.CodeGeneratorOptions() { BlankLinesBetweenMembers = true, VerbatimOrder = false, ElseOnClosing = false, BracingStyle = "C", IndentString = " " }; if (options.UseFolders) { foreach (var file in MetaFacade.SplitCompileUnit(compileUnit)) { var fileInfo = new FileInfo(Path.Combine(options.OutputFile, file.Key) + "." + generator.FileExtension); CheckDirectoryExists(fileInfo.Directory); using (var fs = fileInfo.Create()) { using (var sw = new StreamWriter(fs)) { generator.GenerateCodeFromCompileUnit(file.Value, sw, genOptions); } } } } else { using (var sw = new StreamWriter(options.OutputFile)) { generator.GenerateCodeFromCompileUnit(compileUnit, sw, genOptions); } } Console.WriteLine("Code generated successfully!"); }
/// <summary> /// Compiles the source files to assembly. /// </summary> /// <param name="files">The files.</param> /// <returns> /// Result of the compilation. /// </returns> public CompileResult CompileSourceFilesToAssembly(IEnumerable<string> references, params string[] files) { Guard.Against(files == null, "No files to compile."); Guard.Against(files.Length == 0, "No files to compile."); CompileResult result = new CompileResult(); // get the source files List<FileInfo> sourceFiles = new List<FileInfo>(); foreach (string file in files) sourceFiles.Add(new FileInfo(file)); // make sure all the source files are the same language var extensions = sourceFiles.Select(s => s.Extension).Distinct(); if (extensions.Count() != 1) { result.Status = CompileStatus.Error; result.Errors = new string[] { "Source files to compile must all be the same language." }; return result; } string extension = extensions.Single().ToLower(); // get compiler parameters var cp = new CompilerParameters(); cp.GenerateExecutable = false; cp.GenerateInMemory = false; cp.TreatWarningsAsErrors = false; #if DEBUG cp.TempFiles = new TempFileCollection(System.Environment.GetEnvironmentVariable("TEMP"), true); cp.IncludeDebugInformation = true; #endif cp.ReferencedAssemblies.AddRange(this.referencedAssemblies.ToArray()); if (references != null && references.Count() > 0) cp.ReferencedAssemblies.AddRange(references.ToArray()); // setup compiler variables CodeDomProvider provider = null; CompilerResults results = null; var providerOptions = new Dictionary<string,string> { { "CompilerVersion", "v4.0" } }; // get the provider if (extension == ".cs") { provider = CodeDomProvider.CreateProvider("CSharp", providerOptions); } else if (extension == ".vb") { provider = CodeDomProvider.CreateProvider("VisualBasic", providerOptions); } else if (extension == ".js") { provider = new Microsoft.JScript.JScriptCodeProvider(); } else { result.Status = CompileStatus.Error; result.Errors = new string[] { string.Format("Compiler for language type '{0}' is not supported.", extension) }; return result; } // compile! results = provider.CompileAssemblyFromFile(cp, sourceFiles.Select(s => s.FullName).ToArray()); // use compile assembly if (results.Errors.Count == 0) { result.Status = CompileStatus.Success; result.CompiledAssembly = results.CompiledAssembly; } else { result.Status = CompileStatus.Error; // gather error messages string[] errors = new string[results.Errors.Count]; for (int i = 0; i < results.Errors.Count; i++) { CompilerError error = results.Errors[i]; errors[i] = string.Format("Line {0}, Col {1}: Error {2} - {3}", error.Line, error.Column, error.ErrorNumber, error.ErrorText); } result.Errors = errors; } return result; }
// 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; }
private static void GenerateCode(Options options) { var packageTransform = new NMF.Models.Meta.Meta2ClassesTransformation(); var stopWatch = new Stopwatch(); packageTransform.ForceGeneration = options.Force; packageTransform.CreateOperations = options.Operations; packageTransform.DefaultNamespace = options.OverallNamespace; var metaPackage = LoadPackageFromFiles(options.InputFiles, options.OverallNamespace); var model = metaPackage.Model; if (model == null) { model = new Model(); model.RootElements.Add(metaPackage); } model.ModelUri = metaPackage.Uri; if (options.NMeta != null) { using (var fs = File.OpenWrite(options.NMeta)) { MetaRepository.Instance.Serializer.Serialize(model, fs); } } stopWatch.Start(); var compileUnit = TransformationEngine.Transform<INamespace, CodeCompileUnit>(metaPackage, options.Parallel ? (ITransformationEngineContext)new ParallelTransformationContext(packageTransform) : new TransformationContext(packageTransform)); stopWatch.Stop(); Console.WriteLine("Operation took {0}ms", stopWatch.Elapsed.TotalMilliseconds); CodeDomProvider generator = null; switch (options.Language) { case SupportedLanguage.CS: generator = new Microsoft.CSharp.CSharpCodeProvider(); break; case SupportedLanguage.VB: generator = new Microsoft.VisualBasic.VBCodeProvider(); break; case SupportedLanguage.FS: generator = new Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider(); break; case SupportedLanguage.CPP: generator = new Microsoft.VisualC.CppCodeProvider(); break; case SupportedLanguage.JS: generator = new Microsoft.JScript.JScriptCodeProvider(); break; default: Console.WriteLine("Unknown language detected. Falling back to default C#"); generator = new Microsoft.CSharp.CSharpCodeProvider(); break; } var genOptions = new System.CodeDom.Compiler.CodeGeneratorOptions() { BlankLinesBetweenMembers = true, VerbatimOrder = false, ElseOnClosing = false, BracingStyle = "C", IndentString = " " }; if (options.UseFolders) { foreach (var file in MetaFacade.SplitCompileUnit(compileUnit)) { var fileInfo = new FileInfo(Path.Combine(options.OutputFile, file.Key) + "." + generator.FileExtension); CheckDirectoryExists(fileInfo.Directory); using (var fs = fileInfo.Create()) { using (var sw = new StreamWriter(fs)) { generator.GenerateCodeFromCompileUnit(file.Value, sw, genOptions); } } } } else { using (var sw = new StreamWriter(options.OutputFile)) { generator.GenerateCodeFromCompileUnit(compileUnit, sw, genOptions); } } Console.WriteLine("Code generated successfully!"); }
private void OutputGeneratedCode(CodeCompileUnit compileUnit) { CodeDomProvider generator = null; switch (options.Language) { case SupportedLanguage.CS: generator = new Microsoft.CSharp.CSharpCodeProvider(); break; case SupportedLanguage.VB: generator = new Microsoft.VisualBasic.VBCodeProvider(); break; case SupportedLanguage.CPP: generator = new Microsoft.VisualC.CppCodeProvider(); break; case SupportedLanguage.JS: generator = new Microsoft.JScript.JScriptCodeProvider(); break; case SupportedLanguage.PY: generator = new PythonProvider(); break; default: Console.WriteLine("Unknown language detected. Falling back to default C#"); generator = new Microsoft.CSharp.CSharpCodeProvider(); break; } var genOptions = new CodeGeneratorOptions() { BlankLinesBetweenMembers = true, VerbatimOrder = false, ElseOnClosing = false, BracingStyle = "C", IndentString = " " }; if (options.UseFolders) { foreach (var file in MetaFacade.SplitCompileUnit(compileUnit)) { var fileInfo = new FileInfo(Path.Combine(options.OutputFile, file.Key) + "." + generator.FileExtension); CheckDirectoryExists(fileInfo.Directory); using (var sw = new StreamWriter(fileInfo.Create())) { generator.GenerateCodeFromCompileUnit(file.Value, sw, genOptions); } } } else { using (var sw = new StreamWriter(options.OutputFile)) { generator.GenerateCodeFromCompileUnit(compileUnit, sw, genOptions); } } }
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(); }