public IEnumerable<WorkflowInfo> Find(LookupOptions options)
 {
     foreach (var assembly in GetAssemblies(options))
     {
         foreach (var exportedType in assembly.GetExportedTypes())
         {
             var workflowType = GetWorkflowTypeIfPossible(exportedType);
             if (workflowType != null)
             {
                 LoadDllsFromAssemblyDirectory(assembly, options);
                 yield return CreateWorkflowInfo(exportedType, workflowType);
             }
         }
     }
 }
        private void LoadDllsFromAssemblyDirectory(Assembly assembly, LookupOptions options)
        {
            var directory = Path.GetDirectoryName(assembly.Location);
            // todo Check it!!!
            AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
            {
                var assemblyFileName = string.Format("{0}.dll", args.Name.Substring(0, args.Name.IndexOf(",", StringComparison.InvariantCultureIgnoreCase)));
                var assemblyFullPath = Path.Combine(directory, assemblyFileName);
                if (File.Exists(assemblyFullPath))
                {
                    return Assembly.LoadFrom(assemblyFullPath);
                }

                return null;
            };
        }
Exemplo n.º 3
0
        protected WorkflowInfo GetWorkflowInfo(RunningOptions options, IList<IWorkflowLookup> lookups, LogHelper log)
        {
            log.Info("Searching for workflows...");

            var lookupOptions = new LookupOptions(options);
            foreach (var lookup in lookups)
            {
                if (lookup.CanHandle(lookupOptions))
                {
                    log.Info("using lookup {0} for workflow searching", lookup.GetType());
                    var foundWorkflows = lookup.Find(lookupOptions);

                    return SelectDefaultWorkflow(foundWorkflows.ToList(), options, log);
                }
            }

            throw new Exception(string.Format("No lookup to handle input file: {0}", options.InputFile));
        }
Exemplo n.º 4
0
        protected override IEnumerable<Assembly> GetAssemblies(LookupOptions options)
        {
            var buildWorkflow = new BuildWorkflowProjectWorkflow(options.RunningOptions);
            var executerTask = new SubflowTask<Nothing>(buildWorkflow, Identities.Empty);

            var taskContext = new TaskContext(
                new SequenceExecutionStrategy(),
                options.RunningOptions.LogRenderer,
                options.RunningOptions.WorkDirectory,
                new DefaultEnvironment(),
                interceptor: null);

            ITaskResult<Nothing> buildResult = executerTask.Execute(taskContext);

            if (buildResult.IsSuccess)
            {
                var projectName = options.RunningOptions.InputFile.NameWithoutExtension;
                IFile assemblyFile = options.RunningOptions.InputFile.Directory["bin"]["Debug"][projectName + ".dll"];

                yield return Assembly.LoadFile(assemblyFile.AbsolutePath);
            }
        }
 public override bool CanHandle(LookupOptions options)
 {
     return options.RunningOptions.InputFile.Extension.Is(".dll");
 }
 protected override IEnumerable<Assembly> GetAssemblies(LookupOptions options)
 {
     yield return Assembly.LoadFile(options.RunningOptions.InputFile.AbsolutePath);
 }
 protected abstract IEnumerable<Assembly> GetAssemblies(LookupOptions options);
 public abstract bool CanHandle(LookupOptions options);