public override void Install(IDictionary stateSaver)
        {
            base.Install(stateSaver);

            try
            {
                BizTalkAssemblyResolver.Register(msg => Context.LogMessage(msg));
                ApplyContextArguments();
                if (Context.Parameters.ContainsKey("BindingFilePath"))
                {
                    var bindingFilePath = Context.Parameters["BindingFilePath"];
                    GenerateBindingFile(bindingFilePath);
                }
                if (Context.Parameters.ContainsKey("SetupFileAdapterPaths"))
                {
                    var users = Context.Parameters["Users"].IfNotNullOrEmpty(u => u.Split(';', ','));
                    SetupFileAdapterPaths(users);
                }
                if (Context.Parameters.ContainsKey("InitializeServices"))
                {
                    InitializeServices();
                }
            }
            finally
            {
                BizTalkAssemblyResolver.Unregister();
            }
        }
        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"]);
        }
        public override void Uninstall(IDictionary savedState)
        {
            base.Uninstall(savedState);

            try
            {
                BizTalkAssemblyResolver.Register(msg => Context.LogMessage(msg));
                ApplyContextArguments();
                if (Context.Parameters.ContainsKey("TeardownFileAdapterPaths"))
                {
                    var recurse = Context.Parameters.ContainsKey("Recurse");
                    TeardownFileAdapterPaths(recurse);
                }
            }
            finally
            {
                BizTalkAssemblyResolver.Unregister();
            }
        }