public static void Main()

in src/managed/DiffGen/tools/DiffGenTool/Program.cs [23:156]


    public static void Main(string[] args)
    {
        Console.WriteLine("Platform: {0}", RuntimeInformation.OSDescription);
        Console.WriteLine("Running Directory: {0}", ProcessHelper.RunningDirectory);

        if (args.Length < 4 || args.Length > 5)
        {
            Console.WriteLine("Usage: DiffGenTool <source archive> <target archive> <output path> <log folder> <working folder>");
            Console.WriteLine("Usage: DiffGenTool <source archive> <target archive> <output path> <working folder>");
            Environment.Exit(1);
        }

        string sourceFile = args[0];
        string targetFile = args[1];
        string outputFile = args[2];

        string workingFolder;
        string logFolder;

        if (args.Length == 4)
        {
            workingFolder = args[3];
            try
            {
                logFolder = MakeLogFolder(workingFolder);
            }
            catch (Exception e)
            {
                WriteErrorMessage(e.Message);
                Environment.Exit(1);
                return;
            }
        }
        else
        {
            logFolder = args[3];
            workingFolder = args[4];
        }

        CancellationTokenSource cancellationTokenSource = new();
        DiffBuilder.Parameters parameters = new()
        {
            SourceFile = sourceFile,
            TargetFile = targetFile,
            OutputFile = outputFile,
            LogFolder = logFolder,
            WorkingFolder = workingFolder,
            KeepWorkingFolder = true,
            CancellationToken = cancellationTokenSource.Token,
        };

        DiffBuilder.ParametersStatus parametersStatus = parameters.Validate(out string[] issues);

        if (parametersStatus != DiffBuilder.ParametersStatus.Ok)
        {
            Console.WriteLine($"Parameters failed. Status: {parametersStatus}");
            Console.WriteLine("Issues:");
            foreach(var issue in issues)
            {
                Console.WriteLine(issue);
            }

            Environment.Exit(1);
            return;
        }

        bool caughtException = false;

        try
        {
            Console.WriteLine("Starting main task.");
            DiffBuilder.Execute(parameters);
            Console.WriteLine("Finished main task.");
        }
        catch (AggregateException ae)
        {
            caughtException = true;

            ae.Handle(e =>
            {
                if (e is TaskCanceledException)
                {
                    Console.WriteLine("Diff generation has been canceled by the user.");
                    if (Directory.Exists(workingFolder))
                    {
                        Console.WriteLine("Working folder had already been created. Manual cleanup may be required.");
                        Console.WriteLine($"Working folder path: {workingFolder}");
                    }

                    return true;
                }
                else if (e is DiffBuilderException dbe)
                {
                    WriteErrorMessage(dbe.Message);
                    return true;
                }
                else
                {
                    return false;
                }
            });
        }
        catch (TaskCanceledException)
        {
            caughtException = true;

            Console.WriteLine("Diff generation has been canceled by the user.");
            if (Directory.Exists(workingFolder))
            {
                Console.WriteLine("Working folder had already been created. Manual cleanup may be required.");
                Console.WriteLine($"Working folder path: {workingFolder}");
            }
        }
        catch (DiffBuilderException e)
        {
            caughtException = true;

            WriteErrorMessage(e.Message);
        }

        if (caughtException)
        {
            Environment.Exit(1);
        }

        Console.WriteLine("Exit Code: {0}", Environment.ExitCode);

        if (Environment.ExitCode != 0)
        {
            Console.WriteLine("Overriding Exit Code to 0.");
        }

        Environment.Exit(0);
    }