コード例 #1
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");
        }
コード例 #2
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;
            }
        }
コード例 #3
0
ファイル: JscriptEvaluator.cs プロジェクト: jhuntsman/FlexNet
		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");
		}
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
ファイル: ExeJsHelper.cs プロジェクト: lsunflower/ORM
        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;
        }
コード例 #7
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());
        }
コード例 #8
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);
        }
コード例 #9
0
        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);
        }
コード例 #10
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);
        }
コード例 #11
0
ファイル: NodeQuery.cs プロジェクト: pchaozhong/FlexNet
        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);
        }
コード例 #12
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();
        }
コード例 #13
0
ファイル: DcEngine.cs プロジェクト: JocysCom/PassGen
        // 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;
        }
コード例 #14
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);
        }
コード例 #15
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);
        }