示例#1
0
        public void UseStaticCheck(Action <StaticCheckOption> option = null)
        {
            var staticCheckOption = new StaticCheckOption();

            option?.Invoke(staticCheckOption);
            buildOption.StaticCheckOption = staticCheckOption;
        }
示例#2
0
        private async Task <string> StaticCheck(StaticCheckOption checker)
        {
            using (var sta = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    Arguments = checker.Args,
                    ErrorDialog = false,
                    FileName = checker.Exec,
                    RedirectStandardError = checker.ReadStdError,
                    RedirectStandardOutput = checker.ReadStdOutput,
                    UseShellExecute = false,
                    WorkingDirectory = _workingdir
                }
            })
            {
                try
                {
                    sta.Start();

                    StringBuilder output = new StringBuilder();

                    if (!sta.WaitForExit(30 * 1000))
                    {
                        try
                        {
                            sta.Kill();
                        }
                        catch
                        {
                            /* ignored */
                        }
                    }

                    if (checker.ReadStdOutput)
                    {
                        var temp = (await sta.StandardOutput.ReadToEndAsync()).Trim();
                        if (!string.IsNullOrWhiteSpace(temp))
                        {
                            output.AppendLine(temp);
                        }
                    }

                    if (checker.ReadStdError)
                    {
                        var temp = (await sta.StandardError.ReadToEndAsync()).Trim();
                        if (!string.IsNullOrWhiteSpace(temp))
                        {
                            output.AppendLine(temp);
                        }
                    }

                    var log = MatchProblem(output.ToString(), checker.ProblemMatcher)
                              .Replace(_workingdir, "...")
                              .Replace(_workingdir.Replace("/", "\\"), "...");

                    try
                    {
                        sta.Kill();
                    }
                    catch
                    {
                        /* ignored */
                    }

                    return(sta.ExitCode == 0 ? log : null);
                }
                catch (Exception ex)
                {
                    return(ex.Message);
                }
            }
        }