【问题标题】:Skipping CAKE dependencies跳过 CAKE 依赖项
【发布时间】:2017-10-04 19:37:00
【问题描述】:

我使用 CAKE 0.22.0。

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

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

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

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

有什么建议吗?

【问题讨论】:

    标签: c# cakebuild


    【解决方案1】:

    没有开箱即用的机制可以完全按照您的意愿行事。有一些关于扩展 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 构建还是普通的 .net 框架构建来更改图表。

    【讨论】:

      猜你喜欢
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 2011-10-29
      • 2019-04-27
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多