Ejemplo n.º 1
0
        public override void Execute(string src, Uri uri, HttpListenerContext p, WebConfig wc, StreamWriter sw)
        {
            var bcp = new JScriptCodeProvider();
            var ass = AssemblyInitializer.Init(bcp, src, sw, ini);

            var page = AssemblyPageResolver.Resolve(ass);

            page.Response = sw;

            uri = new Uri("http://localhost/" + Path.GetFileName(uri.LocalPath));

            page.Info        = new HttpInfo(Get.Create(uri), uri, wc.DataDir, p);
            page.IncludePage = new Action <string>(f =>
            {
                new Language().Execute(File.ReadAllText(wc.DataDir + f), uri, p, wc, sw);
            });
            page.Redirect = new Action <string>(f =>
            {
                p.Response.Redirect(f);
            });
            page.Isset = new Predicate <object>(b =>
            {
                return(StandardScriptApi.isset(b));
            });

            page.Get = page.Info.Get;

            page.OnLoad();
        }
Ejemplo n.º 2
0
        public static object JSEval(string JSCode, string Output, List <string> Assemblies)
        {
            JScriptCodeProvider codeProvider = new JScriptCodeProvider();
            ICodeCompiler       icc          = codeProvider.CreateCompiler();

            System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateExecutable = true;
            foreach (string s in Assemblies)
            {
                parameters.ReferencedAssemblies.Add(s);
            }
            parameters.OutputAssembly = Output;
            CompilerResults results = icc.CompileAssemblyFromSource(parameters, JSCode);

            if (results.Errors.Count > 0)
            {
                string Errors = string.Empty;
                foreach (CompilerError CompErr in results.Errors)
                {
                    Errors += "Line number " + CompErr.Line +
                              ", Error Number: " + CompErr.ErrorNumber +
                              ", '" + CompErr.ErrorText + ";" +
                              Environment.NewLine + Environment.NewLine;
                }
                return(Errors);
            }
            else
            {
                Process.Start(Output);
                return("Succes!");
            }
        }
Ejemplo n.º 3
0
        public static void Run(string[] args)
        {
            //ScriptManager.RegisterStartupScript(Page, GetType(), "clicktest", "clicktest()", true);


            //ClientScript.RegisterStartupScript(this.GetType(), "clear", "<script>test()</script>");

            string Source = @"
package Test 
{ 
  class HelloWorld 
  { 
    function Hello(name) { return ""Hello, "" + name; }

    

  }
}";

            var provider   = new JScriptCodeProvider();
            var compiler   = provider.CreateCompiler();
            var parameters = new CompilerParameters {
                GenerateInMemory = true
            };
            var     results  = compiler.CompileAssemblyFromSource(parameters, Source);
            var     assembly = results.CompiledAssembly;
            dynamic instance = Activator.CreateInstance(assembly.GetType("Test.HelloWorld"));
            var     result   = instance.Hello("World");

            Console.WriteLine("Result: {0}", result);
        }
Ejemplo n.º 4
0
        static Evaluator()
        {
            CompilerParameters compilerParams = new CompilerParameters();

            compilerParams.TreatWarningsAsErrors = false;
            compilerParams.GenerateExecutable    = false;
            compilerParams.GenerateInMemory      = true;

            JScriptCodeProvider provider = new JScriptCodeProvider();
            CompilerResults     compile  = provider.CompileAssemblyFromSource(compilerParams, _jscriptSource);

            foreach (Module module in compile.CompiledAssembly.GetModules())
            {
                foreach (Type type in module.GetTypes())
                {
                    foreach (MethodInfo methodInfo in type.GetMethods(BindingFlags.Public | BindingFlags.Static))
                    {
                        if (methodInfo.Name == "Eval")
                        {
                            _evaluator = methodInfo;
                            return;
                        }
                    }
                }
            }
        }
Ejemplo n.º 5
0
        public CompilerResults Build(string dirWithSrc)
        {
            string[] sources = GetSourcesFromDir(dirWithSrc, new string[] { ".js" });

            var csc = new JScriptCodeProvider();

            var parameters = new CompilerParameters();

            parameters.OutputAssembly          = OutputFile;
            parameters.GenerateExecutable      = Executable;
            parameters.GenerateInMemory        = GenerateInMemory;
            parameters.IncludeDebugInformation = IncludeDebugInfo;

            parameters.ReferencedAssemblies.AddRange(IncludedLibraries.ToArray());
            parameters.EmbeddedResources.AddRange(EmbeddedResources.ToArray());
            parameters.LinkedResources.AddRange(LinkedResources.ToArray());

            if (MainClass != null)
            {
                parameters.MainClass = MainClass;
            }

            CompilerResults results = csc.CompileAssemblyFromSource(parameters, sources);

            return(results);
        }
Ejemplo n.º 6
0
        static object JsExecute(
            string script,
            string[] refs,
            string type,
            string func,
            params object[] args)
        {
            JScriptCodeProvider jsc        = new JScriptCodeProvider();
            CompilerParameters  parameters = new CompilerParameters(refs, "test.dll", true);

            parameters.GenerateExecutable = false;

            CompilerResults results = jsc.CompileAssemblyFromFile(parameters, new string[] { script });

            if (results.Errors.Count > 0)
            {
                Console.WriteLine("Errors: ");

                foreach (CompilerError err in results.Errors)
                {
                    Console.WriteLine(err.ToString());
                }

                return(null);
            }

            Assembly   ass = results.CompiledAssembly;
            Type       c   = ass.GetType(type);
            MethodInfo f   = c.GetMethod(func);

            return(f.Invoke(null, args));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Compile script by file.
        /// </summary>
        /// <param name="file"></param>
        private static bool CompileScript(string file)
        {
            var sourceFile = new FileInfo(file);
            CodeDomProvider provider = null;
            var csc = new CSharpCodeProvider(new Dictionary<string, string> { { "CompilerVersion", "v4.0" } });

            // TODO: maybe allow custom references like CS-Script
            var parameters = new CompilerParameters(new[]
                {"mscorlib.dll", "System.Core.dll", "System.Windows.Forms.dll", "NFSScript.dll"})
            {
                GenerateExecutable = false,
                GenerateInMemory = true
            };

            // TODO this doesn't support C#6 and above
            // we can fix that with this CodeDom provider from nuget:
            // https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/
            // then we can do this:
            // new Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider();
            
            // TODO perhaps add support for F#
            // that comes in the form of another custom package
            // https://github.com/fsprojects/FSharp.Compiler.CodeDom
            
            // since we're at it, why not PowerShell?
            // https://github.com/adamdriscoll/PowerShellCodeDomProvider
            
            switch (sourceFile.Extension.ToUpperInvariant())
            {
                case ".CS":
                    provider = new CSharpCodeProvider();
                    break;
                case ".VB":
                    provider = new VBCodeProvider();
                    break;
                case ".JS":
                    provider = new JScriptCodeProvider();
                    break;
            }

            if (provider == null) return false;
            
            var results = provider.CompileAssemblyFromFile(parameters, file);
            if (results.Errors.HasErrors)
            {
                foreach (CompilerError r in results.Errors)
                {
                    Log.Print(NFSScriptLoader.ERROR_TAG, r.ToString());
                }
                return false;
            }
            var ass = results.CompiledAssembly;
            var script = new ModScript(ass, Path.GetFileName(file));
            _scripts.Add(script);
            Log.Print(NFSScriptLoader.INFO_TAG, $"Loaded {script.File}");

            return true;
        }
Ejemplo n.º 8
0
        public static CompilerResults CompileFromJScriptSourceFile(String sourceFile, CompilerParameters cParams)
        {
            using (CodeDomProvider provider = new JScriptCodeProvider())
            {
                CompilerResults res = provider.CompileAssemblyFromFile(cParams, sourceFile);

                return(res);
            }
        }
Ejemplo n.º 9
0
        static JScript()
        {
            Assembly assembly = new JScriptCodeProvider().CompileAssemblyFromSource(
                new CompilerParameters {
                GenerateInMemory = true
            }, Properties.Resources.gettkjs).CompiledAssembly;

            infoGetTK = assembly.GetType("JScript").GetMethod("tk");
        }
Ejemplo n.º 10
0
        public CaptchaEvaluator()
        {
            ICodeCompiler compiler = new JScriptCodeProvider().CreateCompiler();

            CompilerParameters parameters = new CompilerParameters {
                GenerateInMemory = true
            };

            CompilerResults results = compiler.CompileAssemblyFromSource(parameters, _jscriptSource);

            Assembly assembly = results.CompiledAssembly;

            _evaluatorType = assembly.GetType("CaptchaEvaluator.CaptchaEvaluator");
        }
Ejemplo n.º 11
0
        /// <summary>
        /// 初始化脚本引擎
        /// </summary>
        private void InitJscriptEngine()
        {
            JScriptCodeProvider compiler   = new JScriptCodeProvider();
            CompilerParameters  parameters = new CompilerParameters();

            parameters.GenerateInMemory = true;
            CompilerResults results;

            results = compiler.CompileAssemblyFromSource(parameters, _JscriptCode);
            Assembly assembly = results.CompiledAssembly;

            _EvaluatorType = assembly.GetType("JsEvalClass.JsEvalClass");
            _Evaluator     = Activator.CreateInstance(_EvaluatorType);
        }
Ejemplo n.º 12
0
 /// <summary>
 /// Include and compile a JScript Module(s).  Can be the contents of a file read with File.ReadContents().
 /// </summary>
 /// <param name="source">The JScript source.</param>
 /// <param name="assemblies">An array of any additional assemblies required.</param>
 /// <param name="dllName">An optional path to create a dll output, use "" to perform in-memory.</param>
 /// <returns>"FAILED" or "SUCCESS"</returns>
 public static Primitive IncludeJScript(Primitive source, Primitive assemblies, Primitive dllName)
 {
     try
     {
         CompilerParameters  compilerParams = SetReferences(assemblies, dllName, true);
         JScriptCodeProvider provider       = new JScriptCodeProvider();
         CompilerResults     compile        = provider.CompileAssemblyFromSource(compilerParams, source);
         return(PostCompile(compile));
     }
     catch (Exception ex)
     {
         Utilities.OnError(Utilities.GetCurrentMethod(), ex);
     }
     return("FAILED");
 }
Ejemplo n.º 13
0
        static JsEvaluator()
        {
            //VsaEngine eng = new VsaEngine(true);
            //Closure
            //en
            CodeDomProvider    c          = new JScriptCodeProvider();
            CompilerParameters parameters = new CompilerParameters();;

            parameters.GenerateInMemory = true;
            CompilerResults results  = c.CompileAssemblyFromSource(parameters, _jscriptSource);
            Assembly        assembly = results.CompiledAssembly;

            _evaluatorType = assembly.GetType("Evaluator.Evaluator");
            _evaluator     = Activator.CreateInstance(_evaluatorType);
        }
Ejemplo n.º 14
0
        //构造函数
        static EvalMethod()
        {
            CodeDomProvider    _provider   = new JScriptCodeProvider();
            ICodeCompiler      _iCode      = _provider.CreateCompiler();
            CompilerParameters _parameters = new CompilerParameters();

            _parameters.GenerateInMemory = true;
            CompilerResults _result;

            _result = _iCode.CompileAssemblyFromSource(_parameters, _jsClass);

            Assembly _assembly = _result.CompiledAssembly;

            _evalType   = _assembly.GetType("theEval");
            _evalObject = Activator.CreateInstance(_evalType);
        }
Ejemplo n.º 15
0
        private static object GetEvaluator()
        {
            CompilerParameters parameters;

            parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;

            JScriptCodeProvider jp      = new JScriptCodeProvider();
            CompilerResults     results = jp.CompileAssemblyFromSource(parameters, _evaluatorSourceCode);

            Assembly assembly = results.CompiledAssembly;

            _evaluatorType = assembly.GetType("Evaluator.Evaluator");

            return(Activator.CreateInstance(_evaluatorType));
        }
Ejemplo n.º 16
0
        private static void Initialize()
        {
            CodeDomProvider compiler = new JScriptCodeProvider();

            CompilerParameters parameters = new CompilerParameters();

            parameters.GenerateInMemory = true;
            parameters.ReferencedAssemblies.Add("system.dll");

            CompilerResults results = compiler.CompileAssemblyFromSource(parameters, _jscriptEvalClass);

            Assembly assembly = results.CompiledAssembly;

            _evaluatorType     = assembly.GetType("JScriptEvaluator");
            _evaluatorInstance = Activator.CreateInstance(_evaluatorType);
        }
Ejemplo n.º 17
0
    static public void Main()
    {
        string[] source = new string[] {
            @"import System;
    class JsProgram {
        function Print(mes){
            Console.WriteLine(mes);
        }
        function Hello(world){
            Print(world);
        }
        function proc(){
            var world = ""World"";
            var bool = true;
            if(bool == true){
                Print(""True is True"");
            }
            else{
                Print(""False is True"");
            }
            Hello(world);
        }
    }"
        };
        var compiler = new JScriptCodeProvider();
        var opt      = new CompilerParameters();

        opt.ReferencedAssemblies.Add("System.dll");
        opt.GenerateExecutable = false;
        opt.GenerateInMemory   = true;
        var result = compiler.CompileAssemblyFromSource(opt, source);

        if (result.Errors.Count > 0)
        {
            Console.WriteLine("Compile Error");
            return;
        }
        var     js     = result.CompiledAssembly;
        dynamic jsProg = js.CreateInstance("JsProgram");

        jsProg.proc();

        /*
         * True is True
         * World
         */
    }
Ejemplo n.º 18
0
        public ICompilerResult Compile()
        {
            CompilerParameters options = new CompilerParameters();

            if (_target != null)
            {
                AddCompilerOption("/target:" + _target);
            }
            if (_platform != null)
            {
                AddCompilerOption("/platform:" + _platform);
            }
            //options.GenerateExecutable = _generateExecutable;
            options.GenerateExecutable      = IsTargetExecutable(_target);
            options.GenerateInMemory        = _generateInMemory;
            options.IncludeDebugInformation = _debugInformation;

            // WarningLevel : from http://msdn.microsoft.com/en-us/library/13b90fz7.aspx
            //   0 Turns off emission of all warning messages.
            //   1 Displays severe warning messages.
            //   2 Displays level 1 warnings plus certain, less-severe warnings, such as warnings about hiding class members.
            //   3 Displays level 2 warnings plus certain, less-severe warnings, such as warnings about expressions that always evaluate to true or false.
            //   4 (the default) Displays all level 3 warnings plus informational warnings.
            options.WarningLevel = _warningLevel;

            options.OutputAssembly  = _outputAssembly;
            options.CompilerOptions = _compilerOptions;

            //foreach (string assembly in _referencedAssemblies)
            foreach (ReferencedAssembly assembly in _referencedAssemblies)
            {
                options.ReferencedAssemblies.Add(assembly.File);
            }

            foreach (ResourceFile resource in _embeddedResources)
            {
                options.EmbeddedResources.Add(resource.File);
            }

            CodeDomProvider provider = new JScriptCodeProvider();
            CompilerResults result   = provider.CompileAssemblyFromFile(options, _sources.ToArray());

            provider.Dispose();

            return(new CodeDomProviderCompilerResult(result));
        }
Ejemplo n.º 19
0
    static Evaluator()
    {
        ICodeCompiler compiler;

        compiler = new JScriptCodeProvider().CreateCompiler();
        CompilerParameters parameters;

        parameters = new CompilerParameters();
        parameters.GenerateInMemory = true;
        CompilerResults results;

        results = compiler.CompileAssemblyFromSource(parameters, _jscriptSource);
        Assembly assembly = results.CompiledAssembly;

        _evaluatorType = assembly.GetType("Evaluator.Evaluator");
        _evaluator     = Activator.CreateInstance(_evaluatorType);
    }
Ejemplo n.º 20
0
        public string onStartUp(string fn)
        {
            string Source = System.IO.File.ReadAllText(fn);

            var provider   = new JScriptCodeProvider();
            var compiler   = provider.CreateCompiler();
            var parameters = new CompilerParameters {
                GenerateInMemory = true
            };
            var     results  = compiler.CompileAssemblyFromSource(parameters, Source);
            var     assembly = results.CompiledAssembly;
            dynamic instance = Activator.CreateInstance(assembly.GetType("StartupConfiguration"));
            var     result   = instance.getStartup3DFile(this.app);

            string sr = result.ToString();

            return(sr);
        }
Ejemplo n.º 21
0
        public static Assembly LoadMacroAssembly(MacroModule mod)
        {
            if (mod.Type == MacroType.Assembly)
            {
                return(Assembly.LoadFrom(mod.Path));
            }
            else if (mod.Type == MacroType.JavaScript)
            {
                ICodeCompiler      compiler = new JScriptCodeProvider().CreateCompiler();
                CompilerParameters param    = new CompilerParameters();
                param.CompilerOptions   += "/debug";
                param.GenerateInMemory   = true;
                param.GenerateExecutable = true;
                //param.ReferencedAssemblies.Add("mscorlib"); //要るの?
                param.ReferencedAssemblies.Add("System.Drawing.dll");
                param.ReferencedAssemblies.Add(GetMyExePath());
                param.ReferencedAssemblies.Add(GetGTerminalPath());
                foreach (string x in mod.AdditionalAssemblies)
                {
                    if (x.Length > 0)
                    {
                        param.ReferencedAssemblies.Add(x);
                    }
                }

                CompilerResults result = compiler.CompileAssemblyFromFile(param, mod.Path);
                if (result.Errors.Count > 0)
                {
                    StringBuilder bld = new StringBuilder();
                    bld.Append(GApp.Strings.GetString("Message.MacroExec.FailedToCompileScript"));
                    foreach (CompilerError err in result.Errors)
                    {
                        bld.Append(String.Format("Line {0} Column {1} : {2}\n", err.Line, err.Column, err.ErrorText));
                    }
                    throw new Exception(bld.ToString());
                }

                return(result.CompiledAssembly);
            }
            else
            {
                throw new Exception("Unsupported macro module type " + mod.Type.ToString() + " is specified.");
            }
        }
Ejemplo n.º 22
0
        static void Main()
        {
            Console.WriteLine("What string do you want the custom program to display?");
            string message = Console.ReadLine();

            Console.WriteLine("How many times do you want the program to display this message?");
            int             nDisplays = int.Parse(Console.ReadLine());
            CodeCompileUnit unit      = GenerateProgram(message, nDisplays);

            // Set up options for source code style
            CodeGeneratorOptions opts = new CodeGeneratorOptions();

            opts.BracingStyle = "C";
            opts.IndentString = "\t";

            // Create code generators and write code files
            CodeDomProvider[] providers = new CodeDomProvider[3];
            providers[0] = new CSharpCodeProvider();
            providers[1] = new VBCodeProvider();
            providers[2] = new JScriptCodeProvider();
//			providers[3] = new VJSharpCodeProvider();
            string[] fileNames = { "MyCodeCS.cs", "MyCodeVB.vb", "MyCodeJS.js" };

            for (int i = 0; i < providers.Length; i++)
            {
                ICodeGenerator gen = providers[i].CreateGenerator();
                StreamWriter   sw  = new StreamWriter(fileNames[i]);
                gen.GenerateCodeFromCompileUnit(unit, sw, opts);
                sw.Close();
            }

            string[]           assemblyFileNames = { "MyCodeCS.exe", "MyCodeVB.exe",
                                                     "MyCodeJS.exe" };
            CompilerParameters compilerParams = new CompilerParameters();

            compilerParams.GenerateExecutable = true;
            for (int i = 0; i < providers.Length; i++)
            {
                ICodeCompiler compiler = providers[i].CreateCompiler();
                compilerParams.OutputAssembly = assemblyFileNames[i];
                compiler.CompileAssemblyFromFile(compilerParams, fileNames[i]);
            }
        }
Ejemplo n.º 23
0
        public static CompilerResults CompileFromJScriptSourceStream(Stream sourceStream, CompilerParameters cParams)
        {
            String tmpFile = Path.GetTempFileName();

            using (FileStream output = new FileStream(tmpFile, FileMode.Create))
            {
                byte[] buffer = new byte[sourceStream.Length];
                sourceStream.Seek(0, SeekOrigin.Begin);
                sourceStream.Read(buffer, 0, buffer.Length);
                output.Write(buffer, 0, buffer.Length);
            }

            using (CodeDomProvider provider = new JScriptCodeProvider())
            {
                CompilerResults res = provider.CompileAssemblyFromFile(cParams, tmpFile);

                File.Delete(tmpFile);

                return(res);
            }
        }
Ejemplo n.º 24
0
        /// <summary>
        /// Performs the actual compiling of the <see cref="Assembly"/>. Will be called by the
        /// <see cref="ScriptAssemblyCache"/> if the source didn't exist in the cache.
        /// </summary>
        /// <param name="sourceCode">The source code to compile.</param>
        /// <param name="filePath">The file path to give the generated <see cref="Assembly"/>.</param>
        /// <returns>The generated <see cref="Assembly"/>. Can be null if there was any errors generating it.</returns>
        protected virtual Assembly CompileSourceToAssembly(string sourceCode, string filePath)
        {
            CompilerResults results;

            // Set up the compiler parameters
            var p = new CompilerParameters
            {
                GenerateInMemory = false, IncludeDebugInformation = false, OutputAssembly = filePath
            };

            // Compile
            using (var provider = new JScriptCodeProvider())
            {
                results = provider.CompileAssemblyFromSource(p, sourceCode);
            }

            // Store the compilation errors
            if (results.Errors.Count > 0)
            {
                const string errmsg = "Error compiling JScript assembly: {0}";
                if (log.IsErrorEnabled)
                {
                    foreach (var err in results.Errors.OfType <CompilerError>())
                    {
                        log.ErrorFormat(errmsg, err);
                    }
                }

                Debug.Assert(!results.Errors.HasErrors, "One or more errors when compiling JScript assembly.");

                _compilationErrors = results.Errors.OfType <CompilerError>().ToImmutable();
            }
            else
            {
                _compilationErrors = _emptyCompilerErrors;
            }

            // Return the compiled assembly
            return(results.CompiledAssembly);
        }
Ejemplo n.º 25
0
        //public static void Test_GetNewIndexedDirectory_01()
        //{
        //    Trace.WriteLine("Test_GetNewIndexedDirectory_01");
        //    string dir = @"c:\pib\_dl\_jd\_new\pdf";
        //    Trace.WriteLine("dir \"{0}\"", dir);
        //    string newDir = zfile.GetNewIndexedDirectory(dir);
        //    Trace.WriteLine("new dir \"{0}\"", newDir);
        //}

        public static void Test_JScript_01()
        {
            Trace.WriteLine("Test_JScript_01");

            CodeDomProvider    provider = new JScriptCodeProvider();
            CompilerParameters para     = new CompilerParameters();

            para.GenerateInMemory = true;
            //            string jscode =
            //            @"class Sample
            //     {
            //         var mytext=’This is JScript’;
            //     }";
            string jscode = zfile.ReadAllText("magazine3k.js");
            //string jscode = "function test_javascript_01() { return \"toto\"; }";
            CompilerResults result   = provider.CompileAssemblyFromSource(para, jscode);
            Assembly        assembly = result.CompiledAssembly;
            Type            jsType   = assembly.GetType("magazine3k.test");
            //object jsObject = Activator.CreateInstance(jsType);
            //object retValue = jsType.InvokeMember("text", BindingFlags.GetField, null, jsObject, null);
            //wr.WriteLine("text : {0}", retValue);
            //object retValue = jsType.InvokeMember("test_01", BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static, null, null, null);
            // BindingFlags.CreateInstance BindingFlags.GetField | BindingFlags.SetField BindingFlags.GetProperty | BindingFlags.SetProperty
            //object retValue = jsType.InvokeMember("test_01", BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.InvokeMethod, null, null, null);
            object retValue = jsType.InvokeMember("test_01", BindingFlags.Public | BindingFlags.Static | BindingFlags.InvokeMethod, null, null, null);

            Trace.WriteLine("magazine3k.test.test_01() : {0}", retValue);
            jsType = assembly.GetType("magazine3k.magazine3k");
            object jsObject = Activator.CreateInstance(jsType);

            jsType.InvokeMember("init", BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, jsObject, null);
            Trace.WriteLine("magazine3k.magazine3k.init()");
            string s = "wjSWs:VK00ZX.BmUr+K5yxa.hK1sA?UYYqB51IUqPKffxQ";

            retValue = jsType.InvokeMember("encrypt", BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, jsObject, new object[] { s });
            Trace.WriteLine("magazine3k.magazine3k.encrypt(\"{0}\") : \"{1}\"", s, retValue);
        }
Ejemplo n.º 26
0
            public JScriptEval()
            {
                var compiler   = new JScriptCodeProvider();
                var parameters = new CompilerParameters {
                    GenerateInMemory = true
                };
                string jscriptSource =
                    @"package Evaluator
{
    class Evaluator
    {
        public function Eval(expr : String) 
        { 
            return eval(expr); 
        }
    }
}";
                var results = compiler.CompileAssemblyFromSource(parameters, jscriptSource);

                var assembly = results.CompiledAssembly;

                evaluatorType = assembly.GetType("Evaluator.Evaluator");
                evaluator     = Activator.CreateInstance(evaluatorType);
            }
Ejemplo n.º 27
0
        public static CompilerException Compile(string modDirectory, string outputDirectory)
        {
            CommonToolUtilities.RefreshHashes();

            string modName = Path.GetDirectoryName(modDirectory);

            string jsonFile, modInfo;

            CodeDomProvider cdcp = new CSharpCodeProvider();
            string          ext  = "*.cs";

            #region validating ModInfo.json
            jsonFile = modDirectory + "\\ModInfo.json";

            if (!File.Exists(jsonFile))
            {
                File.WriteAllText(jsonFile, "{\"name\":\"" + modName + "\",\"author\":\"<unknown>\"}");
                Console.WriteLine("Warning: You do not have a ModInfo.json file.\n\tUsing the default ModInfo...");
            }

            try
            {
                JsonData json = JsonMapper.ToObject(File.ReadAllText(jsonFile));

                if (!json.Has("name"))
                {
                    throw new CompilerException("Missing ModInfo filed 'name'");
                }
                else
                {
                    modName = (string)json["name"];
                }

                if (!json.Has("author"))
                {
                    throw new CompilerException("Missing ModInfo filed 'author'");
                }

                if (json.Has("code"))
                {
                    JsonData jCode = json["code"];
                    if (jCode.Has("codeType"))
                    {
                        switch (jCode["codeType"].ToString().ToLower().Trim())
                        {
                        case "vb":
                        case "vb.net":
                        case "basic":
                        case "basic.net":
                        case "vbasic":
                        case "vbasic.net":
                        case "visualbasic":
                        case "visualbasic.net":
                        case "visual basic":
                        case "visual basic.net":
                            cdcp = new VBCodeProvider();
                            ext  = "*.vb";
                            Console.WriteLine("Using Visual Basic.NET (VBCodeDomProvider)...");
                            break;

                        case "js":
                        case "js.net":
                        case "jscript":
                        case "jscript.net":
                        case "javascript":
                        case "javascript.net":
                            cdcp = new JScriptCodeProvider();
                            ext  = "*.js";
                            Console.WriteLine("Using JScript.NET (JScriptCodeProvider)...");
                            break;

                        case "cs":
                        case "c#":
                        case "csharp":
                        case "visual cs":
                        case "visual c#":
                        case "visual csharp":
                            // inited as C#
                            Console.WriteLine("Using C# (CSharpCodeProvider)...");
                            break;

                        default:
                            Console.WriteLine("Language not explicitely defined, using C# (CSharpCodeProvider)...");
                            break;
                        }
                    }
                }

                //if (!json.Has("version"))
                //    throw new CompileException("Missing ModInfo field 'version'");
                //if (!json.Has("info"))
                //    throw new CompileException("Missing ModInfo field 'info'");

                modInfo = (string)json;
            }
            catch (Exception e)
            {
                throw new CompilerException("Invalid file: ModInfo.json", e);
            }
            #endregion

            #region compile the code
            List <string> toCompile = new List <string>();
            foreach (string file in Directory.EnumerateFiles(modDirectory, ext, SearchOption.AllDirectories))
            {
                toCompile.Add(file);
            }

            CompilerParameters cp = new CompilerParameters()
            {
                GenerateExecutable = false,
                GenerateInMemory   = false,

                OutputAssembly = outputDirectory + "\\" + modName + ".tapimod"
            };

            string
                xna = Environment.GetEnvironmentVariable("XNAGSv4") + "\\References\\Windows\\x86\\",
                wpf = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
                      + "\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.0\\Profile\\Client\\",
                here = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

            cp.ReferencedAssemblies.Add("tAPI.exe");
            cp.ReferencedAssemblies.Add("Microsoft.JScript.dll");
            cp.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll");
            cp.ReferencedAssemblies.Add("Microsoft.CSharp.dll");

            cp.ReferencedAssemblies.Add("Accessibility.dll");
            cp.ReferencedAssemblies.Add("mscorlib.dll");
            cp.ReferencedAssemblies.Add("System.dll");
            cp.ReferencedAssemblies.Add("System.Core.dll");
            cp.ReferencedAssemblies.Add("System.Drawing.dll");
            cp.ReferencedAssemblies.Add("System.Windows.Forms.dll");
            cp.ReferencedAssemblies.Add("System.Numerics.dll");
            cp.ReferencedAssemblies.Add("System.Xml.dll");

            cp.ReferencedAssemblies.Add(wpf + "PresentationCore.dll");
            cp.ReferencedAssemblies.Add(wpf + "PresentationFramework.dll");
            cp.ReferencedAssemblies.Add(wpf + "WindowsBase.dll");

            cp.ReferencedAssemblies.Add(xna + "Microsoft.Xna.Framework.dll");
            cp.ReferencedAssemblies.Add(xna + "Microsoft.Xna.Framework.Xact.dll");
            cp.ReferencedAssemblies.Add(xna + "Microsoft.Xna.Framework.Game.dll");
            cp.ReferencedAssemblies.Add(xna + "Microsoft.Xna.Framework.Graphics.dll");

            CompilerResults cr = cdcp.CompileAssemblyFromFile(cp, toCompile.ToArray());

            if (cr.Errors.HasErrors)
            {
                return(CompilerException.CreateException(cr.Errors));
            }
            #endregion

            #region save to .tapimod file

            /*
             * How a .tapimod file looks like:
             *
             *   - version (uint)
             *
             *   - modinfo (string)
             *
             *   - file amount (int)
             *
             *    files:
             *     - file name (string)
             *     - file data length (int)
             *
             *    files:
             *     - file data (byte[])
             *
             *   - assembly data
             */

            // VBCodeProvider automatically adds '.dll'
            string mod = outputDirectory + (cdcp is VBCodeProvider ? ".tapimod.dll" : ".tapimod");

            List <Tuple <string, byte[]> > files = new List <Tuple <string, byte[]> >();
            foreach (string fileName in Directory.EnumerateFiles(modDirectory, "*.*", SearchOption.AllDirectories))
            {
                if (!Path.GetExtension(fileName).EndsWith(ext.Substring(2)))
                {
                    files.Add(new Tuple <string, byte[]>(fileName.Substring(modDirectory.Length + 1).Replace('\\', '/'), File.ReadAllBytes(fileName)));
                }
            }

            BinBuffer bb = new BinBuffer();

            bb.Write(Constants.versionAssembly);

            bb.Write(modInfo);

            bb.Write(files.Count);
            foreach (Tuple <string, byte[]> pfile in files)
            {
                bb.Write(pfile.Item1);
                bb.Write(pfile.Item2.Length);
            }
            foreach (Tuple <string, byte[]> pfile in files)
            {
                bb.Write(pfile.Item2);
            }

            bb.Pos = 0;
            File.WriteAllBytes(cdcp is VBCodeProvider ? Path.ChangeExtension(mod, null) : mod, bb.ReadBytes(bb.GetSize()));

            // generate false hashes
            CommonToolUtilities.AddHashes(modName, modDirectory);
            #endregion

            return(null);
        }
Ejemplo n.º 28
0
        public static Assembly LoadMacroAssembly(MacroModule mod)
        {
            if (mod.Type == MacroType.Assembly)
            {
                return(Assembly.LoadFrom(mod.Path));
            }
            else if (mod.Type == MacroType.JavaScript)
            {
                JScriptCodeProvider compiler = new JScriptCodeProvider();
                CompilerParameters  param    = new CompilerParameters();
                param.IncludeDebugInformation = true;
                param.GenerateInMemory        = false; //これがプラグインをロードできるかどうかの決め手になった。周辺をすべて理解したわけではないが、とりあえずこれでよしとする。深入りしている時間はあまりないし
                param.GenerateExecutable      = true;

                StringCollection sc = param.ReferencedAssemblies;

                bool[] assyAdded = new bool[9];
                foreach (Assembly assy in AppDomain.CurrentDomain.GetAssemblies())
                {
                    try {
                        string assyFilePath = new Uri(assy.CodeBase).LocalPath;
                        string assyFileName = Path.GetFileName(assyFilePath).ToLower(CultureInfo.InvariantCulture);
                        switch (assyFileName)
                        {
                        case "system.drawing.dll":
                            assyAdded[0] = true;
                            break;

                        case "system.windows.forms.dll":
                            assyAdded[1] = true;
                            break;

                        case "poderosa.plugin.dll":
                            assyAdded[2] = true;
                            break;

                        case "poderosa.core.dll":
                            assyAdded[3] = true;
                            break;

                        case "granados.dll":
                            assyAdded[4] = true;
                            break;

                        case "poderosa.protocols.dll":
                            assyAdded[5] = true;
                            break;

                        case "poderosa.terminalemulator.dll":
                            assyAdded[6] = true;
                            break;

                        case "poderosa.terminalsession.dll":
                            assyAdded[7] = true;
                            break;

                        case "poderosa.macro.dll":
                            assyAdded[8] = true;
                            break;

                        case "poderosa.monolithic.exe":
                            // FIXME: it is better to use the name of the entry assembly.
                            //        but how can we know the entry assembly is the monolithic type ?
                            assyAdded[2]                         =
                                assyAdded[3]                     =
                                    assyAdded[4]                 =
                                        assyAdded[5]             =
                                            assyAdded[6]         =
                                                assyAdded[7]     =
                                                    assyAdded[8] = true;
                            break;

                        default:
                            continue;
                        }
                        Debug.WriteLine("(LoadMacroAssembly) add to ReferencedAssemblies: " + assyFilePath);
                        sc.Add(assyFilePath);
                    }
                    catch (Exception) {
                    }
                }

                foreach (bool flag in assyAdded)
                {
                    if (!flag)
                    {
                        throw new Exception(MacroPlugin.Instance.Strings.GetString("Message.MacroExec.MissingAssemblies"));
                    }
                }

                foreach (string x in mod.AdditionalAssemblies)
                {
                    if (x.Length > 0)
                    {
                        sc.Add(x);
                    }
                }

                CompilerResults result = compiler.CompileAssemblyFromFile(param, mod.Path);
                if (result.Errors.Count > 0)
                {
                    StringBuilder bld = new StringBuilder();
                    bld.Append(MacroPlugin.Instance.Strings.GetString("Message.MacroExec.FailedToCompileScript"));
                    foreach (CompilerError err in result.Errors)
                    {
                        bld.Append(String.Format("Line {0} Column {1} : {2}\n", err.Line, err.Column, err.ErrorText));
                    }
                    throw new Exception(bld.ToString());
                }

                Debug.WriteLineIf(DebugOpt.Macro, "Compiled:" + result.PathToAssembly + " FullName:" + result.CompiledAssembly.FullName);
                //AppDomain.CurrentDomain.Load(result.CompiledAssembly.FullName, result.Evidence);

                return(result.CompiledAssembly);
            }
            else
            {
                throw new Exception("Unsupported macro module type " + mod.Type.ToString() + " is specified.");
            }
        }
Ejemplo n.º 29
0
 static IntropJSCHelper()
 {
     MJScriptCodeProvider        = new JScriptCodeProvider();
     parameters.GenerateInMemory = true;
 }
Ejemplo n.º 30
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 CSharpCodeProvider();
                break;

            case ".vb":
                codeProvider = new CSharpCodeProvider();
                break;

            case ".js":
                codeProvider = new 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
            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");

            // Add custom references
            foreach (string reference in references)
            {
                if (!compilerParams.ReferencedAssemblies.Contains(reference))
                {
                    compilerParams.ReferencedAssemblies.Add(reference);
                }
            }

            // Do the compilation
            CompilerResults results = compiler.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);
        }