/// <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); if (NoOutputLog) { _task.DoNotLogOutput(); } if (DoNotLog) { _task.NoLog(); } 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)); }