问题描述
全新的 Cake 项目,Setting Up A New Project 中编写的 build.cake
,已添加到 net5.0
控制台应用程序中。
运行 dotnet cake
时,运行程序会悄悄跳过 Clean 任务。
我运行了 dotnet cake --target="Clean" --verbosity=normal
并收到了这个:
Error: One or more errors occurred. (Could not reach target 'Clean' since it was skipped due to a criteria.)
不知道跳过任务的标准是什么。
我的build.cake
:
var target = Argument("target","Test");
var configuration = Argument("configuration","Release");
///////////////////////////////////////////////////////////
// TASKS
//////////////////////////////////////////////////////////
Task("Clean")
.WithCriteria(c => HasArgument("rebuild"))
.Does(() =>
{
CleanDirectory($"./LucroMei/bin/{configuration}");
});
Task("Build")
.IsDependentOn("Clean")
.Does(() =>
{
DotNetCoreBuild("./LucroMei.sln",new DotNetCoreBuildSettings
{
Configuration = configuration,});
});
Task("Test")
.IsDependentOn("Build")
.Does(() =>
{
DotNetCoreTest("./LucroMei.sln",new DotNetCoreTestSettings
{
Configuration = configuration,NoBuild = true,});
});
///////////////////////////////////////////////////////////
// EXECUTION
//////////////////////////////////////////////////////////
RunTarget(target);
解决方法
脚本中的 Clean
任务是用 criteria 定义的,看看这一行:
.WithCriteria(c => HasArgument("rebuild"))
这意味着只有在指定条件的情况下任务才会运行。条件是 HasArgument("rebuild")
,它试图在指定的其他参数中找到名为 rebuild
的参数。
如果您像这样运行脚本,Clean 目标将运行:
dotnet cake --rebuild
,
错误信息很清楚:
无法达到目标“清洁”,因为它被由于标准而被跳过
看看你的 Clean
目标,它有一个标准期望:
Task("Clean")
.WithCriteria(c => HasArgument("rebuild")) // <<#<<#<<#<<#<<#<<#####
.Does(() => { ... });
这意味着您的 Clean
条件仅在您提供参数 --rebuild
时才会运行:
dotnet cake --target="Clean" --verbosity=normal --rebuild