跳过CAKE依赖项

时间:2017-10-04 09:09:59

标签: c# cakebuild

我使用CAKE 0.22.0。

每当我将Target设置为RunTests时,我希望在完成所有单元测试后执行任务CleanUpTempFiles。根据{{​​3}},我可以简单地写下以下内容:

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

然而,这对我不起作用,因为有时候我想在没有实际运行任何测试的情况下运行CleanUpTempFiles。例如,我想添加一个名为RunJetBrainsDotCover的任务,该任务取决于CleanUpTempFiles,但依赖于RunTests

我考虑创建一个名为CleanUpTempFiles的方法,然后我将其作为Does RunTests子句中的最后一步调用,并作为{{1}中的第一步}}。但是,我对这种方法并不完全满意 - 我更喜欢将RunJetBrainsDotCover作为一项任务,因为这样可以更清楚地了解运行每个目标所涉及的步骤。

有什么建议吗?

1 个答案:

答案 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构建来改变图形。