Cake参数传递
在build.cake中定义参数,然后在命令行中通过 "--参数名 参数值" 的方式调用
-
定义参数
var target = Argument<string>("target", "Default"); var config = Argument<string>("configuration", "Release");
-
调用
.\build.ps1 --target test --configuration Debug
-
参数别名
- 参数可以通过别名调用,Cake 定义参数调用: "--参数名 参数",powershell 别名调用: "-别名 参数"
- build.ps1 设置使用 AliasAttribute 标签在参数定义上设置别名
# 给参数 "Configuration" 设置别名 "c":[Alias("c")] [CmdletBinding()] Param( [string]$Script, [string]$Target, [Alias("c")] [ValidateSet("Release", "Debug")] [string]$Configuration, [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)] [string[]]$ScriptArgs ) # Cake 参数调用 .\build.ps1 --Configuration Debug # Powershell 别名参数调用 .\build.ps1 -c Debug
文件CRUD
-
查找文件
// 使用 "-" 排除不需要的文件 var projects = GetFiles("./test/**/*.csproj") - GetFiles("./test/**/*.Microbench.csproj") - GetFiles("./test/**/*.Performance.csproj");
-
清理文件夹
// 同时清理多个文件夹 CleanDirectories(new DirectoryPath[] {output, outputBinaries, outputPackages}); // 通过模糊匹配清理文件夹 CleanDirectories("./**/bin/");
-
拷贝文件/目录
CopyFiles("./build/dist/*.pdb", "./build/pdb/"); CopyDirectory("./build/pdb/", "./build/pdb2");
-
删除文件
DeleteFiles("./build/*.pdb");
调用其他程序
- StartProcess
// 调用 powershell 命令行 StartProcess("PowerShell", new ProcessSettings() { Arguments = "git fetch origin --tags --prune" }); // 调用 nsis StartProcess("C:/Program Files (x86)/NSIS/makensis.exe", new ProcessSettings { Arguments = $"./setup.nsi" });
版本控制
-
修改
AssemblyInfo.cs
-
在
.csproj
或者Directory.Build.props
中添加版本信息// Cake 生成 AssemblyInfo.cs CreateAssemblyInfo("src/shared/SharedAssemblyInfo.cs", new AssemblyInfoSettings { Product = "DotNetty", Company = "Microsoft", Version = version, // 版本信息 FileVersion = version, // 版本信息 Copyright = string.Format("(c) Microsoft 2015 - {0}", DateTime.Now.Year) }); // TODO 修改 .csproj/Directory.Build.props
msbuild
- 使用 msbuild/dotnet 命令编译 .Net 程序
// msbuild 设置 var settings = new MSBuildSettings { Restore = true, // nuget package 是否restore Verbosity = Verbosity.Minimal, // Quiet, Minimal, Normal, Verbose, Diagnostic Configuration = "Release", // Release, Debug PlatformTarget = PlatformTarget.x64, // x64, x86 HandleExitCode = _=> false, // 异常时是否结束整个Task ToolVersion = MSBuildToolVersion.VS2022, // msbuild 路径 // ToolPath = @"C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\MSBuild.exe" }; // msbuild 输出log配置 var buildLoggerPath = "./out/msbuild.log"; var logger = new MSBuildFileLogger() { AppendToLogFile = true, Encoding = "UTF-8", LogFile = new FilePath(buildLoggerPath), MSBuildFileLoggerOutput = MSBuildFileLoggerOutput.All, // All, ErrorsOnly, WarningsOnly Verbosity = Verbosity.Normal }; settings.AddFileLogger(logger); // msbuild 编译 .Net 工程(.csproj/.sln) MSBuild("./DotNetty.sln", settings); //////////////////////////////////////////////////////////////////// // dotnet 编译 .Net 工程(.csproj/.sln) int result = StartProcess("dotnet", new ProcessSettings { Arguments = "msbuild DotNetty.sln /p:Configuration=" + configuration } ); if (result != 0) { throw new CakeException($"Compilation failed."); }
Unit Test
- MSTest/xUnit
// 获取所有单元测试的 csproj 文件 var csProjectFiles = GetFiles("./src/test/**/*.Test.*.csproj"); // 编译单元测试工程(csproj) foreach(var csPoject in csPprojectFiles) { var argument = $"msbuild {csPoject.FullPath} /p:Configuration={configuration}" StartProcess("dotnet", new ProcessSettings { Arguments = argument } ); } // 执行单元测试 var testSettings = new DotNetCoreTestSettings () { HandleExitCode = _=> true, ArgumentCustomization = args=> args.Append("/logger:html;LogFileName=TestResults.html").Append("/logger:trx;LogFileName=TestResults.trx") }; DotNetCoreTest($"./src/test/**/bin/**/Debug/**/*.Test.*.dll", testSettings);