public override TaskResult Start(TaskExecutionNode node) { var task = (RunAssemblyTask)node.RemoteTask; _contextAssembly = LoadContextAssembly(task); if (_contextAssembly == null) { return(TaskResult.Error); } var result = VersionCompatibilityChecker.Check(_contextAssembly); if (!result.Success) { Server.TaskExplain(task, result.Explanation); Server.TaskError(task, result.ErrorMessage); return(TaskResult.Error); } _listener = new PerAssemblyRunListener(Server, task); _runner = new DefaultRunner(_listener, RunOptions.Default); _runScope = GetRunScope(_runner); return(TaskResult.Success); }
public override void ExecuteRecursive(TaskExecutionNode node) { var task = (RunAssemblyTask)node.RemoteTask; var contextAssembly = LoadContextAssembly(task); if (contextAssembly == null) { return; } var result = VersionCompatibilityChecker.Check(contextAssembly); if (!result.Success) { Server.TaskException(node.RemoteTask, new[] { new TaskException("no type", result.ErrorMessage, null) }); return; } var listener = new PerAssemblyRunListener(Server, task); var runner = new AppDomainRunner(listener, RunOptions.Default); var runScope = GetRunScope(runner); node.Flatten(x => x.Children).Each(children => RegisterRemoteTaskNotifications(listener, children)); try { runScope.StartRun(contextAssembly); foreach (var child in node.Children) { RunContext(runner, contextAssembly, child); } } finally { runScope.EndRun(contextAssembly); } }
public override TaskResult Start(TaskExecutionNode node) { var task = (ContextTask)node.RemoteTask; _contextAssembly = LoadContextAssembly(task); if (_contextAssembly == null) { return(TaskResult.Error); } var result = VersionCompatibilityChecker.Check(_contextAssembly); if (!result.Success) { Server.TaskExplain(task, result.Explanation); Server.TaskError(task, result.ErrorMessage); return(TaskResult.Error); } _contextClass = _contextAssembly.GetType(task.ContextTypeName); if (_contextClass == null) { Server.TaskExplain(task, String.Format("Could not load type '{0}' from assembly {1}.", task.ContextTypeName, task.AssemblyLocation)); Server.TaskError(node.RemoteTask, "Could not load context"); return(TaskResult.Error); } _listener = new PerContextRunListener(Server, node.RemoteTask); _runner = new DefaultRunner(_listener, RunOptions.Default); return(TaskResult.Success); }