Beispiel #1
0
        // 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();
        }
Beispiel #2
0
        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");
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        public void BeginCompile(string nameSpace)
        {
            provider = new Microsoft.JScript.JScriptCodeProvider();

            unit = new CodeCompileUnit();
            ns   = new CodeNamespace(nameSpace);
            unit.Namespaces.Add(ns);
        }
Beispiel #5
0
        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;
        }
Beispiel #7
0
		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 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);
            }
        }
Beispiel #10
0
        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;
        }
Beispiel #11
0
        /// <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);
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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);
        }
Beispiel #16
0
        /// <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);
        }
Beispiel #17
0
        // 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);
        }
Beispiel #18
0
        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!");
        }
Beispiel #19
0
        // 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);
        }
Beispiel #20
0
        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!");
        }
Beispiel #21
0
        /// <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;
        }
Beispiel #22
0
        // 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;
        }
Beispiel #23
0
        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!");
        }
Beispiel #24
0
        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);
                }
            }
        }
Beispiel #25
0
        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();
        }