如何解决在 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)
我看不到修复它的方法...
解决方法
您看到的错误 (No CoreCLR executable found
) 是由 Cake.Sonar 在未找到所需工具时引发的。
如果您查看 Cake.Sonar 的自述文件,它会指出运行 Cake.Sonar 需要 #tool nuget:?package=MSBuild.SonarQube.Runner.Tool
。
所以我猜你的 Main
方法应该是这样的:
public static int Main(string[] args)
{
return new CakeHost()
.UseContext<BuildContext>()
.InstallTool(new Uri("nuget:?package=MSBuild.SonarQube.Runner.Tool"))
.Run(args);
}
不过我没有测试过。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。