2017-10-04 72 views
1

我使用CAKE 0.22.0。跳过CAKE依赖关系

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

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

然而,这不适合我,因为我有时想不实际运行任何测试运行CleanUpTempFiles。例如,我想添加一项称为RunJetBrainsDotCover的任务,该任务取决于CleanUpTempFiles,但而不是依赖于RunTests

我想创建一个名为CleanUpTempFiles方法,该方法我将然后调用作为RunTestsDoes子句中的最后一步的,也可作为内RunJetBrainsDotCover的第一步。但是,我对这种方法并不完全满意 - 我更喜欢CleanUpTempFiles作为一项任务,因为这样就更加明确了在运行每个目标时涉及哪些步骤。

有什么建议吗?

回答

2

没有开箱即用的机制来完成你想要的东西。有一些关于扩展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框架的构建图。