Cake.Console 3.0.0.2
dotnet add package Cake.Console --version 3.0.0.2
NuGet\Install-Package Cake.Console -Version 3.0.0.2
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的Install-Package 版本。
<PackageReference Include="Cake.Console" Version="3.0.0.2" />
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用此包。
paket add Cake.Console --version 3.0.0.2
NuGet 团队不提供对此客户端的支持。请联系其 维护者 以获取支持。
#r "nuget: Cake.Console, 3.0.0.2"
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将此内容复制到交互式工具或脚本的源代码中,以引用此包。
// Install Cake.Console as a Cake Addin #addin nuget:?package=Cake.Console&version=3.0.0.2 // Install Cake.Console as a Cake Tool #tool nuget:?package=Cake.Console&version=3.0.0.2
NuGet 团队不提供对此客户端的支持。请联系其 维护者 以获取支持。
Cake.Console
适用于 Cake scripts 的脚本,但在控制台应用程序中。
Cake.Frosting 的替代方案
https://blog.pitermarx.com/2021/09/presenting-cake-console/
用法
创建一个新的项目,并引用 Cake.Console。它看起来可能如下所示
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<OutputType>exe</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Cake.Console" Version="3.0.0" />
</ItemGroup>
</Project>
添加包含代码的单个 Program.cs 文件。利用 顶级语句。
使用 Cake.Console 有两种方式
- 构建 IScriptHost。这是 .cake 脚本中的隐含对象,因此我们可以使用它来注册任务、执行设置等。
var host = new CakeHostBuilder().BuildHost(args);
host.Setup(() => { do something });
host.Task("TaskName").Does(c => c.Information("Hello"));
host.RunTarget(host.Context.Arguments.GetArgument("target"));
- 使用 Cake Cli,它包括 --target、--version、--info、--tree、--description、--exclusive 等参数。它与 frosting 非常相似。
new CakeHostBuilder()
.WorkingDirectory<WorkingDirectory>()
.ContextData<BuildData>()
.RegisterTasks<CakeTasks>()
.InstallNugetTool("NuGet.CommandLine", "5.9.1")
.InstallDotnetTool("GitVersion.Tool", "5.7.0")
.RunCakeCli(args);
在这种情况下,我们无法访问宿主,因此需要使用 Cake.Console 的 4 个扩展定义构建
- WorkingDirectory<>
- RegisterTasks<>
- ContextData<>
- InstallNugetTool
WorkingDirectory<>
这里我们可以使用一个具有接口 IWorkingDirectory 并实现字符串 WorkingDirectory 属性的类的实例。
该类可以在构造函数中接收蛋糕基础设施的任何部分(ICakeContext, ICakeLog, ICakeArguments, ICakeConfiguration...)
RegisterTasks<>
在这里,我们可以使用一个具有ICakeTasks接口的类。
该类可以在构造函数中接收蛋糕基础设施的任何部分(ICakeContext, ICakeLog, ICakeArguments, ICakeConfiguration...)
所有签名为void Name(CakeTaskBuilder builder)
的方法都将被调用,并且方法的名称就是任务的名称。
ContextData<>
在这里,我们可以使用任何类,然后这些类就可以在任务定义中使用。
InstallNugetTool/InstallDotnetTool
给定一个包名和版本,安装nuget包或dotnet工具作为Cake工具
摘要
综合上述内容
using Cake.Common.Diagnostics;
using Cake.Console;
using Cake.Core;
new CakeHostBuilder()
.WorkingDirectory<WorkingDir>()
.ContextData<ContextData>()
.RegisterTasks<CakeTasks>()
.InstallNugetTool("xunit.runner.console", "2.4.1")
.RunCakeCli(args);
record WorkingDir(string WorkingDirectory = ".") : IWorkingDirectory;
class ContextData
{
public string SomeVeryImportantData { get; set; } = "Cake is awesome!";
public ContextData(ICakeArguments args)
{
if (args.HasArgument("tone-down"))
{
SomeVeryImportantData = "Cake is pretty good...";
}
}
}
class CakeTasks : ICakeTasks
{
private readonly ICakeContext ctx;
public CakeTasks(ICakeContext ctx) => this.ctx = ctx;
public void TaskName(CakeTaskBuilder b) => b
.Description("Some task")
.Does(() => ctx.Information("Something"));
public void AnotherTask(CakeTaskBuilder b) => b
.IsDependentOn(nameof(TaskName))
.Does<ContextData>(data => ctx.Information(data.SomeVeryImportantData));
}
也可以使用dotnet-script。感谢badsim。请查看./dotnet-script/test.csx中的示例。
dotnet script --isolated-load-context ./dotnet-script/test.csx --target=test
产品 | 版本 兼容和额外的计算目标框架版本。 |
---|---|
.NET | net6.0 兼容。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。 |
-
net6.0
- Cake.Cli (>= 3.0.0)
- Cake.Common (>= 3.0.0)
- Cake.Core (>= 3.0.0)
- Cake.DotNetTool.Module (>= 3.0.0)
- Cake.Nuget (>= 3.0.0)
- Microsoft.Extensions.DependencyInjection (>= 6.0.0)
nuget包
此包没有被任何nuget包使用。
GitHub仓库
此包没有被任何热门GitHub仓库使用。