private static (int exitCode, string output) CaptureConsoleWrites(Func <int> function)
        {
            using var writer = new StringWriter();
            var @out  = new DuplexTextWriter(Console.Out, writer);
            var error = new DuplexTextWriter(Console.Error, writer);

            Console.SetOut(@out);
            Console.SetError(error);

            try
            {
                return(function(), writer.ToString());
            }
            finally
            {
                Console.SetOut(@out.Original);
                Console.SetError(error.Original);
            }
        }
Пример #2
0
        private static Task <int> InterceptingSystemConsoleWrites(CommandContext context, ExecutionDelegate next)
        {
            if (Console.Out is DuplexTextWriter)
            {
                throw new InvalidOperationException("System.Console is already being intercepted. Interception does not currently support parellel executions.");
            }

            var @out  = new DuplexTextWriter(Console.Out, context.Console.Out);
            var error = new DuplexTextWriter(Console.Error, context.Console.Error);

            try
            {
                Console.SetOut(@out);
                Console.SetError(error);
                return(next(context));
            }
            finally
            {
                Console.SetOut(@out.Original);
                Console.SetError(error.Original);
            }
        }