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); }
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); }
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); }