Ejemplo n.º 1
0
        public async Task <TReturn> Execute <TReturn>(string dllPath)
        {
            var runtimeDeps    = ScriptCompiler.RuntimeDependencyResolver.GetDependencies(dllPath);
            var runtimeDepsMap = ScriptCompiler.CreateScriptDependenciesMap(runtimeDeps);
            var assembly       = Assembly.LoadFrom(dllPath); // this needs to be called prior to 'AppDomain.CurrentDomain.AssemblyResolve' event handler added

            AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
            {
                var assemblyName = new AssemblyName(args.Name);
                var result       = runtimeDepsMap.TryGetValue(assemblyName.Name, out RuntimeAssembly runtimeAssembly);
                if (!result)
                {
                    throw new Exception($"Unable to locate assembly '{assemblyName.Name}: {assemblyName.Version}'");
                }
                var loadedAssembly = Assembly.LoadFrom(runtimeAssembly.Path);
                return(loadedAssembly);
            };

            var type   = assembly.GetType("Submission#0");
            var method = type.GetMethod("<Factory>", BindingFlags.Static | BindingFlags.Public);

            var submissionStates = new object[2];

            submissionStates[0] = new CommandLineScriptGlobals(ScriptConsole.Out, CSharpObjectFormatter.Instance);
            var resultTask = method.Invoke(null, new[] { submissionStates }) as Task <TReturn>;

            return(await resultTask);
        }
Ejemplo n.º 2
0
        public async Task <TReturn> Execute <TReturn>(string dllPath, IEnumerable <string> commandLineArgs)
        {
            var runtimeDeps    = ScriptCompiler.RuntimeDependencyResolver.GetDependenciesForLibrary(dllPath);
            var runtimeDepsMap = ScriptCompiler.CreateScriptDependenciesMap(runtimeDeps);
            var assembly       = Assembly.LoadFrom(dllPath); // this needs to be called prior to 'AppDomain.CurrentDomain.AssemblyResolve' event handler added

            try
            {
                //var p = runtimeDepsMap["System.Drawing.Common"].Path;
                //Console.WriteLine(p);
                //var a2 = Assembly.Load("System.Drawing.Common");
                //var a3 = Assembly.LoadFrom(runtimeDepsMap["System.Drawing.Common"].Path);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
            AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => ResolveAssembly(args, runtimeDepsMap);

            var type   = assembly.GetType("Submission#0");
            var method = type.GetMethod("<Factory>", BindingFlags.Static | BindingFlags.Public);

            var globals = new CommandLineScriptGlobals(ScriptConsole.Out, CSharpObjectFormatter.Instance);

            foreach (var arg in commandLineArgs)
            {
                globals.Args.Add(arg);
            }

            var submissionStates = new object[2];

            submissionStates[0] = globals;

            var resultTask = method.Invoke(null, new[] { submissionStates }) as Task <TReturn>;

            try
            {
                _ = await resultTask;
            }
            catch (System.Exception ex)
            {
                ScriptConsole.WriteError(ex.ToString());
                throw new ScriptRuntimeException("Script execution resulted in an exception.", ex);
            }

            return(await resultTask);
        }
Ejemplo n.º 3
0
        public async Task <TReturn> Execute <TReturn>(string dllPath, IEnumerable <string> commandLineArgs)
        {
            var runtimeDeps    = ScriptCompiler.RuntimeDependencyResolver.GetDependenciesForLibrary(dllPath);
            var runtimeDepsMap = ScriptCompiler.CreateScriptDependenciesMap(runtimeDeps);
            var assembly       = Assembly.LoadFrom(dllPath); // this needs to be called prior to 'AppDomain.CurrentDomain.AssemblyResolve' event handler added

            AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
            {
                var assemblyName = new AssemblyName(args.Name);
                var result       = runtimeDepsMap.TryGetValue(assemblyName.Name, out RuntimeAssembly runtimeAssembly);
                if (!result)
                {
                    throw new Exception($"Unable to locate assembly '{assemblyName.Name}: {assemblyName.Version}'");
                }
                var loadedAssembly = Assembly.LoadFrom(runtimeAssembly.Path);
                return(loadedAssembly);
            };

            var type   = assembly.GetType("Submission#0");
            var method = type.GetMethod("<Factory>", BindingFlags.Static | BindingFlags.Public);

            var globals = new CommandLineScriptGlobals(ScriptConsole.Out, CSharpObjectFormatter.Instance);

            foreach (var arg in commandLineArgs)
            {
                globals.Args.Add(arg);
            }

            var submissionStates = new object[2];

            submissionStates[0] = globals;

            var     resultTask = method.Invoke(null, new[] { submissionStates }) as Task <TReturn>;
            TReturn returnValue;

            try
            {
                returnValue = await resultTask;
            }
            catch (System.Exception ex)
            {
                ScriptConsole.WriteError(ex.ToString());
                throw new ScriptRuntimeException("Script execution resulted in an exception.", ex);
            }

            return(await resultTask);
        }