我使用CAKE 0.22.0。
每当我将Target
设置为RunTests
时,我希望在完成所有单元测试后执行任务CleanUpTempFiles
。根据{{3}},我可以简单地写下以下内容:
Task("CleanUpTempFiles")
.IsDependentOn("RunTests")
.Does(() => { etc. });
然而,这对我不起作用,因为有时候我想在没有实际运行任何测试的情况下运行CleanUpTempFiles
。例如,我想添加一个名为RunJetBrainsDotCover
的任务,该任务取决于CleanUpTempFiles
,但不依赖于RunTests
。
我考虑创建一个名为CleanUpTempFiles
的方法,然后我将其作为Does
RunTests
子句中的最后一步调用,并作为{{1}中的第一步}}。但是,我对这种方法并不完全满意 - 我更喜欢将RunJetBrainsDotCover
作为一项任务,因为这样可以更清楚地了解运行每个目标所涉及的步骤。
有什么建议吗?
答案 0 :(得分:2)
没有开箱即用的机制可以完全按照您的要求做到。有一些关于扩展Cake功能以允许在调用Target时跳过依赖关系的讨论。正在讨论here。
目前,你可以做的一件事就是有两个入口点,即
Task("CleanUpTempFiles")
.IsDependentOn("RunTests")
.Does(() => { etc. });
然后:
Task("OnlyCleanUpTempFiles")
.Does(() => { etc. });
这并不完美,因为这里有一些重复,但这是一个可行的选择。
另一种解决方案是在运行时更改依赖关系图。这在Cake.Recipe中广泛完成,并允许基于一些更高级别的信息来控制图形。例如,这里:
https://github.com/cake-contrib/Cake.Recipe/blob/develop/Cake.Recipe/Content/build.cake#L459
private static void SetupTasks(bool isDotNetCoreBuild)
{
var prefix = isDotNetCoreBuild ? "DotNetCore-" : "";
BuildParameters.Tasks.CreateNuGetPackagesTask.IsDependentOn(prefix + "Build");
BuildParameters.Tasks.CreateChocolateyPackagesTask.IsDependentOn(prefix + "Build");
BuildParameters.Tasks.TestTask.IsDependentOn(prefix + "Build");
BuildParameters.Tasks.DupFinderTask.IsDependentOn(prefix + "Build");
BuildParameters.Tasks.InspectCodeTask.IsDependentOn(prefix + "Build");
BuildParameters.Tasks.PackageTask.IsDependentOn("Analyze");
BuildParameters.Tasks.PackageTask.IsDependentOn("Test");
BuildParameters.Tasks.PackageTask.IsDependentOn("Create-NuGet-Packages");
BuildParameters.Tasks.PackageTask.IsDependentOn("Create-Chocolatey-Packages");
BuildParameters.Tasks.UploadCodecovReportTask.IsDependentOn("Test");
BuildParameters.Tasks.UploadCoverallsReportTask.IsDependentOn("Test");
BuildParameters.Tasks.AppVeyorTask.IsDependentOn("Upload-Coverage-Report");
BuildParameters.Tasks.AppVeyorTask.IsDependentOn("Publish-Chocolatey-Packages");
BuildParameters.Tasks.InstallReportGeneratorTask.IsDependentOn(prefix + "Build");
if (!isDotNetCoreBuild)
{
BuildParameters.Tasks.TestTask.IsDependentOn("Test-NUnit");
BuildParameters.Tasks.TestTask.IsDependentOn("Test-xUnit");
BuildParameters.Tasks.TestTask.IsDependentOn("Test-MSTest");
BuildParameters.Tasks.TestTask.IsDependentOn("Test-VSTest");
BuildParameters.Tasks.TestTask.IsDependentOn("Test-Fixie");
BuildParameters.Tasks.InstallOpenCoverTask.IsDependentOn("Install-ReportUnit");
}
else
{
BuildParameters.Tasks.TestTask.IsDependentOn(prefix + "Test");
BuildParameters.Tasks.InstallOpenCoverTask.IsDependentOn("Install-ReportGenerator");
BuildParameters.Tasks.PackageTask.IsDependentOn(prefix + "Pack");
}
}
我正在根据它是否是DotNetCore Build,或者它是否是正常的.net Framework构建来改变图形。