跳过蛋糕依赖

Skipping CAKE dependencies

我使用 CAKE 0.22.0.

每当我将 Target 设置为 RunTests 时,我希望任务 CleanUpTempFiles 在所有单元测试完成后执行。根据the CAKE documentation,我可以简单的写成:

Task("CleanUpTempFiles")
    .IsDependentOn("RunTests")
    .Does(() => { etc. });

但是,这对我不起作用,因为有时我想 运行 CleanUpTempFiles 而实际上 运行 没有任何测试。例如,我想添加一个名为 RunJetBrainsDotCover 的任务,它依赖于 CleanUpTempFiles 而不是 依赖于 RunTests.

我想创建一个名为 CleanUpTempFiles 的方法,然后我将调用它作为 RunTestsDoes 子句中的最后一步,也是 RunTests 中的第一步=15=]。但是,我对这种方法并不完全满意——我更喜欢将 CleanUpTempFiles 作为一项任务,因为这样它会变得更加明确 运行 每个目标所涉及的步骤。

有什么建议吗?

没有开箱即用的机制可以完全按照您现在的要求进行操作。有一些关于扩展 Cake 的功能以允许在调用目标时跳过依赖项的讨论。正在讨论 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 构建还是普通 .net Framework 构建来更改图表。