示例#1
0
        /// <inheritdoc />
        protected override TResult DoExecute(ITaskContextInternal context)
        {
            if (string.IsNullOrEmpty(ExecutablePath))
            {
                throw new TaskExecutionException($"{nameof(ExecutablePath)} must be set.", 5);
            }

            _task = context.Tasks()
                    .RunProgramTask(ExecutablePath)
                    .DoNotLogTaskExecutionInfo()
                    .WorkingFolder(ExecuteWorkingFolder);

            _task.WithOutputLogLevel(OutputLogLevel);

            _task.WithLogLevel(TaskLogLevel);

            if (KeepProgramOutput)
            {
                _task.CaptureOutput();
            }

            if (KeepProgramErrorOutput)
            {
                _task.CaptureErrorOutput();
            }

            BeforeExecute(context, _task);
            AddOrOverrideArgumentsFromConsole(context);
            var argumentsFlat = ValidateAndGetArgumentsFlat();

            foreach (var arg in argumentsFlat)
            {
                _task.WithArguments(arg.arg, arg.maskArg);
            }

            var result = _task
                         .ChangeDefaultAdditionalOptionPrefix(AdditionalOptionPrefix)
                         .AddPrefixToAdditionalOptionKey(_prefixToAdditionalOptionKeyFunc)
                         .ChangeAdditionalOptionKeyValueSeperator(_additionalOptionKeyValueSeperator)
                         .AddNewAdditionalOptionPrefix(_additionalOptionPrefixes)
                         .Execute(context);

            if (typeof(TResult) == typeof(int))
            {
                return((TResult)(object)result);
            }

            return(default(TResult));
        }