在 Cake.Sonar 中出现关于蛋糕糖霜的错误

问题描述

我正在尝试使用来自 Frosting cake 项目的声纳。

有我的任务:

using Cake.Common;
using Cake.Common.IO;
using Cake.Common.Tools.DotNetCore;
using Cake.Common.Tools.DotNetCore.Build;
using Cake.Core;
using Cake.Core.Diagnostics;
using Cake.Docker;
using Cake.Frosting;
using Cake.Git;
using Cake.SemVer;
using Cake.Sonar;
using System.Linq;

public static class Program
{
    public static int Main(string[] args)
    {
        return new CakeHost()
            .UseContext<BuildContext>()
            .Run(args);
    }
}

public class BuildContext : FrostingContext
{

    public string MsBuildConfiguration { get; set; }
    public string ProjectPath { get; set; }
    public string SolutionFile { get; set; }
    public string SolutionName { get; set; }
    // For SonarQube
    public string SonarKey { get; set; }
    public string SonarUrl { get; set; }
    public string Login { get; set; }
    public string Password { get; set; }
    public string Verbose { get; set; }

    public BuildContext(ICakeContext context)
        : base(context)
    {
        ProjectPath = context.Argument("projectPath",@"C:\Users\User\source\repos\ConsoleApp1");
        MsBuildConfiguration = context.Argument("configuration","Release");
        SolutionFile = context.GetFiles($"{ProjectPath}/*.sln").First().GetFilename().ToString();
        SolutionName = context.GetFiles($"{ProjectPath}/*.sln").First().GetFilenameWithoutExtension().ToString();
        SonarKey = context.Argument("SonarKey","MyProject");
        SonarUrl = context.Argument("SonarUrl","http://localhost:9000/");
        Login = context.Argument("Login","admin");
        Password = context.Argument("Password","admin");
    }
}

[TaskName("Clean")]
[TaskDescription("Clean build solution folder. It depends of value of configuration argument: ./bin/Debug for 'Debug' value or .bin/Release for 'Release' value")]
public sealed class CleanTask : FrostingTask<BuildContext>
{
    public override void Run(BuildContext context)
    {
        var directory = context.Directory($"{context.ProjectPath}/{context.SolutionName}/bin/{context.MsBuildConfiguration}");
        context.Log.Information($"Cleaning folder: {directory}");
        context.CleanDirectory(directory);
    }
}

[TaskName("Restore")]
[TaskDescription("Restore selected project")]
public sealed class RestoreTask : FrostingTask<BuildContext>
{
    public override void Run(BuildContext context)
    {
        var directory = context.Directory($"{context.ProjectPath}/{context.SolutionFile}");
        context.Log.Information($"Restoring project: {directory}");
        context.DotNetCoreRestore(directory);
    }
}

[TaskName("Build")]
[TaskDescription("Build selected project. It depends of value of configuration argument (Debug or Release)")]
[IsDependentOn(typeof(CleanTask))]
[IsDependentOn(typeof(RestoreTask))]
public sealed class BuildTask : FrostingTask<BuildContext>
{
    public override void Run(BuildContext context)
    {
        var directory = context.Directory($"{context.ProjectPath}/{context.SolutionFile}");
        context.Log.Information($"Building project: {directory}");
        context.DotNetCoreBuild(directory,new DotNetCoreBuildSettings
        {
            Configuration = context.MsBuildConfiguration,});
    }
}

[TaskName("SonarBegin")]
[TaskDescription("Start test with SonarQube.")]
public sealed class SonarBeginTask : FrostingTask<BuildContext>
{
    public override void Run(BuildContext context)
    {
        var directory = context.Directory($"{context.ProjectPath}/{context.SolutionFile}");
        var settings = new SonarBeginSettings
        {
            Key = context.SonarKey,Url = context.SonarUrl,Login = context.Login,Password = context.Password,WorkingDirectory = directory,Verbose = true,};
        context.SonarBegin(settings);
    }
}

[TaskName("SonarEnd")]
[TaskDescription("End test with SonarQube.")]
public sealed class SonarEndTask : FrostingTask<BuildContext>
{
    public override void Run(BuildContext context)
    {
        var settings = new SonarEndSettings
        {
            Login = context.Login,};
        context.SonarEnd(settings);
    }
}

[TaskName("Default")]
[IsDependentOn(typeof(SonarBeginTask))]
[IsDependentOn(typeof(BuildTask))]
[IsDependentOn(typeof(SonarEndTask))]
public class DefaultTask : FrostingTask
{
}

exec 的命令是:

./build.ps1 --target 默认 --projectpath C:\route\of\project --sonarkey Prueba --sonarurl http://localhost:9000/ --login admin --password admin --verbosity 诊断

但我收到此错误:

An error occurred when executing task 'SonarBegin'.
Error: System.Exception: No CoreCLR executable found (SonarScanner.MSBuild.dll)
   at Cake.Sonar.SonarRunner.Run(SonarSettings settings)
   at Cake.Sonar.SonarCakeAliases.SonarBegin(ICakeContext context,SonarBeginSettings settings)
   at SonarBeginTask.Run(BuildContext context) in C:\Users\jmedingr\Desktop\MonEES.CICD.Cake\cake\Program.cs:line 166
   at Cake.Frosting.FrostingTask`1.Cake.Frosting.IFrostingTask.RunAsync(ICakeContext context)
   at Cake.Core.CakeTask.Execute(ICakeContext context)
   at Cake.Core.DefaultExecutionStrategy.ExecuteAsync(CakeTask task,ICakeContext context)
   at Cake.Core.CakeEngine.ExecuteTaskAsync(ICakeContext context,IExecutionStrategy strategy,Stopwatch stopWatch,CakeTask task,CakeReport report)
   at Cake.Core.CakeEngine.ExecuteTaskAsync(ICakeContext context,CakeReport report)
   at Cake.Core.CakeEngine.RunTask(ICakeContext context,String target,CakeReport report)
   at Cake.Core.CakeEngine.RunTargetAsync(ICakeContext context,ExecutionSettings settings)
   at Cake.Cli.BuildScriptHost`1.RunTargetAsync(String target)
   at Cake.Core.Scripting.ScriptHost.RunTarget(String target)
   at Cake.Frosting.Internal.FrostingEngine`1.Run(String target)
   at Cake.Frosting.Internal.DefaultCommand.Execute(CommandContext context,DefaultCommandSettings settings)

我看不到修复它的方法...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)