跳过蛋糕依赖
Skipping CAKE dependencies
我使用 CAKE 0.22.0.
每当我将 Target
设置为 RunTests
时,我希望任务 CleanUpTempFiles
在所有单元测试完成后执行。根据the CAKE documentation,我可以简单的写成:
Task("CleanUpTempFiles")
.IsDependentOn("RunTests")
.Does(() => { etc. });
但是,这对我不起作用,因为有时我想 运行 CleanUpTempFiles
而实际上 运行 没有任何测试。例如,我想添加一个名为 RunJetBrainsDotCover
的任务,它依赖于 CleanUpTempFiles
但 而不是 依赖于 RunTests
.
我想创建一个名为 CleanUpTempFiles
的方法,然后我将调用它作为 RunTests
的 Does
子句中的最后一步,也是 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 构建来更改图表。
我使用 CAKE 0.22.0.
每当我将 Target
设置为 RunTests
时,我希望任务 CleanUpTempFiles
在所有单元测试完成后执行。根据the CAKE documentation,我可以简单的写成:
Task("CleanUpTempFiles")
.IsDependentOn("RunTests")
.Does(() => { etc. });
但是,这对我不起作用,因为有时我想 运行 CleanUpTempFiles
而实际上 运行 没有任何测试。例如,我想添加一个名为 RunJetBrainsDotCover
的任务,它依赖于 CleanUpTempFiles
但 而不是 依赖于 RunTests
.
我想创建一个名为 CleanUpTempFiles
的方法,然后我将调用它作为 RunTests
的 Does
子句中的最后一步,也是 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 构建来更改图表。