public override bool Execute() { try { BizTalkAssemblyResolver.Register(msg => Log.LogMessage(msg)); var assemblyPaths = PipelineDefinitionAssemblies .Select(ra => ra.GetMetadata("Identity")) .ToArray(); BizTalkAssemblyResolver.RegisterProbingPaths(assemblyPaths.Select(Path.GetDirectoryName).ToArray()); // TODO refactor this in task ResolveReferencedBizTalkPipelineAssemblies var pipelineTypes = assemblyPaths .Select(Assembly.LoadFrom) // make sure all assemblies are loaded before proceeding with reflection .ToArray() // discard Be.Stateless.BizTalk.Dsl assembly .Where(a => a != typeof(ReceivePipeline).Assembly) .SelectMany(a => a.GetTypes()) .Where(t => !t.IsAbstract && !t.IsGenericTypeDefinition) .Where(t => typeof(ReceivePipeline).IsAssignableFrom(t) || typeof(SendPipeline).IsAssignableFrom(t)); // TODO delete all previously generated files var outputs = new List <ITaskItem>(); foreach (var pipelineType in pipelineTypes) { var path = ComputeOutputPath(pipelineType); Log.LogMessage(MessageImportance.High, "Generating pipeline '{0}'.", pipelineType.FullName); // ReSharper disable once AssignNullToNotNullAttribute Directory.CreateDirectory(Path.GetDirectoryName(path)); var pipelineSerializerFactory = (IPipelineSerializerFactory)Activator.CreateInstance(pipelineType); pipelineSerializerFactory.GetPipelineDesignerDocumentSerializer().Save(path); Log.LogMessage(MessageImportance.High, "Adding pipeline to item group {0}", path); var taskItem = new TaskItem(path); taskItem.SetMetadata("TypeName", pipelineType.Name); taskItem.SetMetadata("Namespace", pipelineType.Namespace); outputs.Add(taskItem); } PipelineFiles = outputs.ToArray(); return(true); } catch (Exception exception) { Log.LogErrorFromException(exception, true, true, null); return(false); } finally { BizTalkAssemblyResolver.Unregister(); } }
private void ApplyContextArguments() { var targetEnvironment = Context.Parameters["TargetEnvironment"]; if (targetEnvironment.IsNullOrEmpty()) { throw new InvalidOperationException("TargetEnvironment has no defined value."); } BindingGenerationContext.TargetEnvironment = targetEnvironment; var environmentSettingRootPath = Context.Parameters["EnvironmentSettingOverridesRootPath"]; if (!environmentSettingRootPath.IsNullOrEmpty()) { BindingGenerationContext.EnvironmentSettingRootPath = environmentSettingRootPath; } BizTalkAssemblyResolver.RegisterProbingPaths(Context.Parameters["AssemblyProbingPaths"]); }