走进 Cake for .NET

一、什么是 Cake

 Cake(C# Make) 是一个使用 C#  DSL 面向 Task 的跨平台构建自动化系统,像编译代码,复制文件和文件夹,运行单元测试,压缩文件和构建 NuGet 包。

更多内容请访问官网

 

二、使用 Cake

先尝试一下 Package 的例子

1. 创建一个类库项目

2. VS Code 添加 Cake 扩展

3. Ctrl + Shift + P ,输入 Cake ,然后选择 install to work space,这个会安装的最全

640?wx_fmt=jpeg

名字不改的话,按几下 Enter 键就可以了,然后你会发现项目里多了几个文件

640?wx_fmt=jpeg  640?wx_fmt=jpeg

tools 是 Cake.CoreCLR 的东西(如果引用其他的 tool 或者 addin 也会加到这里),build.cake 是 Windows 平台会调用的脚本, build.sh 是 Linux 平台会调用的脚本,这2个脚本都会调用 build.cake,cake.config 是 cake 的配置文件

 

然后在 build.cake 里写要执行的脚步就可以了

默认会有 2个 变量,一个会在所有 Task 执行之前调用的 Setup 方法,一个会在所有 Task 执行之后调用的 Teardown 方法,还有一个默认的 Task ,最后是调用上边的 RunTarget(target)

 

一般的流程会是 Clean -> Restore -> Build -> Test -> Package -> Publish,当然开发环境和生产环境步骤会有一点区别,正好就用最后的 RunTarget 来决定

target 的参数在运行 build.ps1 时可以指定,如 ./build.ps1  -Target Dev 就会运行 Task(“Dev”),不写就是Default,也可以只运行其中一个 Task ,./build.ps1 -t “Clean”


#tool nuget:?package=xunit.runner.console -Version 2.3.1
//
// ARGUMENTS
//
var target = Argument("target""Default");
var configuration = Argument("configuration""Release");
//
// PREPARATION
//
var version = XmlPeek(csprojName ,"/Project/PropertyGroup/Version/text()");  //这个是在 csproj 文件里写了 Version 信息,也可以用其他方式
var buildId = GitLabCI.Environment.Build.Id;   //取 GitLab 的构建号,这样每次打包的 Nuget 包就不会重复了
var buildDir = Directory("./src/**/bin") + Directory(configuration);
//
// TASKS
//
Task("Clean")
.Does(() =>
{
  CleanDirectory(buildDir);
});
Task("Restore-NuGet-Packages")
  .IsDependentOn("Clean")
  .Does(() =>
{
  NuGetRestore(./src/Test.sln); 
   //solution 文件,也可以是 project 的名字,如果你只想编译其中一个 project
});
Task("Build")
  .IsDependentOn("Restore-NuGet-Packages")
  .Does(() =>
{
  if(IsRunningOnWindows())
  {
    MSBuild(./src/Test.sln, settings => settings.SetConfiguration(configuration));
       //solution 文件,也可以是 project 的名字,如果你只想构建其中一个 project
  }
  else
  {
    XBuild(./src/XXX.sln, settings => settings.SetConfiguration(configuration));
    //solution 文件,也可以是 project 的名字,如果你只想构建其中一个 project
  }
});
Task("Run-Unit-Tests")
  .IsDependentOn("Build")
  .Does(() =>
{
  XUnit("./src/**.Test/bin/" + configuration + "*/.Test.dll",
      new XUnitSettings
      {
        HtmlReport = false,
        XmlReport = true,
        OutputDirectory = "./build"
      });
});
Task("Package")
  .IsDependentOn("Run-Unit-Tests")
  .Does(()=>
{
  if(projectName != "")
  {
    NuGetPack(new NuGetPackSettings
          {
            Id = "Test Id",
            Title = "Test Title",
            Version = version + "." + buildId,
            Description = "Test Description",
            Authors = new[] {"Test Author"},
            Files = new []
                 {
                    new NuSpecContent {Source = projectName + ".dll", Target = "lib/netcoreapp2.0"},
                   new NuSpecContent {Source = projectName + ".pdb", Target = "lib/netcoreapp2.0"},
                 },
            BasePath = "./src/*/bin/Release/netcoreapp2.0",
            OutputDirectory = "./src/*/bin/Release"
          });
   }
});
Task("Publish")
  .IsDependentOn("Package")
  .Does(()=>
{
  if(projectName != "")
  {
    var nugetSettings = new NuGetPushSettings
                {
                  ApiKey = EnvironmentVariable("NUGET_API_KEY"),
                  Source = EnvironmentVariable("NUGET_SOURCE"),
                  Verbosity = NuGetVerbosity.Detailed
                };
    // 这里的 EnvironmentVariable 是在 GitLab 里设置了,其他的 CI 工具里也都有相应的设置,如果是本地,可以在 Nuget 的配置文件里设置好
    NuGetPush("./src/*/bin/" + configuration + "/*." + version + "." + buildId + ".nupkg" , nugetSettings);
  }
});
//TASK TARGETS
Task("Default")
  .IsDependentOn("Publish");
Task("Dev")
  .IsDependentOn("Run-Unit-Tests");
//EXECUTION
RunTarget(target);

 

以上就可以使用了,但是还有一些其他的细节


//错误信息输出,比如 Clean 出错
Task("Clean")
    .Does(() =>
    {
        CleanDirectory(buildDir);
    })
    .OnError(exception =>
    {
        Error(exception.Message);
        Information("Clean Task failed");
    });
     
//目录是否存在
DirectoryExists();
     
//文件是否存在
FileExists();
     
//路径是否存在
PathExists();

 这些可以根据需要灵活添加

 

  DoNetCore 网站的例子也都差不多,这里只列出区别的地方


//Restore
DotNetCoreRestore();
//Build
DotNetCoreBuild("./src/Test.sln");
//test
DotNetCoreTest("url");
// package
DotNetCorePulish("./src"new DotNetCorePublishSettings
{
   OutputDirectory = "publish"
});
//确认文件夹存在
EnsureDirectoryExists(packageOutputPath);
//Publish
Zip("publish",$"{packageOutputPath}/Test.{version}.zip");
//Upload
CurlUploadFile($"{packageOutputPath}/Test.{version}.zip",new Url("")
         ,new CurlSettings
            {
                  RequestCommand ="POST",
                 Username = "user",
              EnvironmentVariable(""),
                 Password = "password",
                 ArgumentCustomization= args=> args.Append("--fail")
              });

原文地址https://www.cnblogs.com/heyixiaoran/p/8975137.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jzoj4616-[NOI2016模拟7.12]二进制的世界【平衡规划,dp】

正题 题目大意 nnn个数,对于每个数找左边的一个数执行optoptopt操作使得答案最大,并且求有多少个数能够使得最大。 解题思路 我们设fi,jf_{i,j}fi,j​表示下一个数的后888位为iii,当前数的前888位为jjj时的最大后888位的答案。然后每次用fi,…

Wannafly挑战赛17

剩下的不太会就没接着打了&#xff0c;没有注意到比赛截至时间&#xff0c;好像提前了几分钟公开题解。意识到的时候已经来不及了。。。抱歉。。。 —————————————————————————————————————— A.走格子 按题意模拟即可 #include <bits/…

【结论】环

环 题目大意&#xff1a; 给出一个环中的三个数&#xff0c;这三个数按输入顺序连接&#xff08;有向&#xff09;&#xff0c;问连接的线是顺时针还是逆时针 原题&#xff1a; 题目描述 有一个圆&#xff0c;1-N共N个数在圆环上顺时针排列着。 现在给你a,b,c三个数&#…

Asp.Net Core 快速邮件队列设计与实现

发送邮件几乎是软件系统中必不可少的功能&#xff0c;在Asp.Net Core 中我们可以使用MailKit发送邮件&#xff0c;MailKit发送邮件比较简单&#xff0c;网上有许多可以参考的文章&#xff0c;但是应该注意附件名长度&#xff0c;和附件名不能出现中文的问题&#xff0c;如果你遇…

CF1114F-Please, another Queries on Array?【线段树,欧拉函数】

正题 题目链接:https://www.luogu.com.cn/problem/CF1114F 题目大意 nnn个数的一个序列要求支持 区间乘上一个数询问一个区间的乘积的φ\varphiφ值 解题思路 因为数很小&#xff0c;而我们求φ\varphiφ需要知道一个数所包含的质因子。发现在300300300以内的只有626262个质…

牛客练习赛20

A. 礼物 枚举一元奥利奥的个数&#xff0c;计算2元的个数&#xff0c;现在需要解决从N种物品中&#xff0c;取x个的方法数&#xff0c;把N个种类看作N个盒子&#xff0c;奥利奥看作球&#xff0c;就是经典球盒模型了。 #include <bits/stdc.h> #define rep(i,a,b) for(in…

【模拟】数列

数列 题目大意&#xff1a; 有一个序列&#xff0c;1,11,21,1211,111221,3122111,11,21,1211,111221,3122111,11,21,1211,111221,312211&#xff0c;形如上一个数有x1x_1x1​个x2x_2x2​&#xff0c;x3x_3x3​个x4x_4x4​&#xff0c;把x连起来即为当前数 原题&#xff1a; …

.net core redis 驱动推荐,为什么不使用 StackExchange.Redis

前言本人从事 .netcore 转型已两年有余&#xff0c;对 .net core 颇有好感&#xff0c;这一切得益于优秀的语法、框架设计。2006年开始使用 .net 2.0&#xff0c;从 asp.net 到 winform 到 winservice 等等领域开发都些许涉猎。对.net和大多数同胞有着类似的感触&#xff0c;那…

2018 计蒜之道 复赛

A. 贝壳找房函数最值 常规贪心推式子。按(a-1)/b排序 #include <bits/stdc.h> #define rep(i,a,b) for(int ia;i<b;i) #define frep(i,a,b) for(int ia;i>b;--i) #define mem(W) memset(W,0,sizeof(W)) #define pb push_back typedef long long ll; const int N 1…

看电影

看电影 题目大意&#xff1a; 在一个有n个点的环中选m个人&#xff0c;选中ld号的可能性为多少 原题&#xff1a; 题目描述 听说NOIP2016大家都考得不错&#xff0c;于是CCF奖励省常中了 K 张变形金刚5的电影票奖励OI队的同学去看电影。可是省常中OI队的同学们共有 N&…

[开源]开放域实体抽取泛用工具 NetCore2.1

开放域实体抽取泛用工具https://github.com/magicdict/FDDC更新时间 2018年7月16日 By 带着兔子去旅行开发这个工具的起源是天池大数据竞赛&#xff0c;FDDC2018金融算法挑战赛02&#xff0d;A股上市公司公告信息抽取。这个比赛是针对金融公告开展的信息抽取比赛。在参赛过程中…

牛客-牛牛的猜球游戏

正题 题目链接:https://ac.nowcoder.com/acm/contest/7605/B 题目大意 101010个数&#xff0c;nnn个操作交换两个位置的数。mmm次询问操作一段区间后的序列。 解题思路 处理出fi,jf_{i,j}fi,j​表示处理了前iii个第jjj位的是哪个数。然后拿fl−1f_{l-1}fl−1​和frf_rfr​一一…

【DP】树塔狂想曲

树塔狂想曲 题目大意&#xff1a; 有一个数字金字塔&#xff0c;让你求出去掉一个点后&#xff0c;从最顶端走到最低端的最大值&#xff08;只能往下或右下走&#xff09; 原题: 题目描述 相信大家都在长训班学过树塔问题&#xff0c;题目很简单求最大化一个三角形数塔从上…

CF438D-The Child and Sequence【线段树】

正题 题目链接:https://www.luogu.com.cn/problem/CF438D 题目大意 一个序列要求支持 区间求和区间取模单点修改 解题思路 对于一个数取模会有结果x%p{x≤⌊x2⌋xx\% p\{\begin{matrix}x\leq \lfloor\frac{x}{2}\rfloor\\x\end{matrix}x%p{x≤⌊2x​⌋x​ 也就是一个数最多…

主席树学习笔记

主席树学习笔记 说在前边&#xff1a; 之前了解过主席树的基础的思想&#xff0c;但是没有系统学习过&#xff0c;所以打算通过一些题目重新学习。POJ2104 题意&#xff1a;静态区间查询 k-th number思路&#xff1a;对每个位置开一颗权值线段树&#xff0c;维护前缀区间每个数…

初一模拟赛总结(2019.5.25)

成绩&#xff1a; 本蒟蒻竟AKAKAK了&#xff0c;不敢相信 &#xff89;)&#xff9f;Д&#xff9f;( rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4111lyflyflyf400400400100100100100100100100100100100100100222hkyhkyhky3203203201001001001001001006…

.NET Core开发日志——HttpClientFactory

当需要向某特定URL地址发送HTTP请求并得到相应响应时&#xff0c;通常会用到HttpClient类。该类包含了众多有用的方法&#xff0c;可以满足绝大多数的需求。但是如果对其使用不当时&#xff0c;可能会出现意想不到的事情。博客园官方团队就遇上过这样的问题&#xff0c;国外博主…

YbtOJ#20067-[NOIP2020模拟赛B组Day5]糖果分配【dp】

正题 题目链接:http://noip.ybtoj.com.cn/contest/102/problem/1 题目大意 nnn个xix_ixi​在[li,ri][l_i,r_i][li​,ri​]中随机选择&#xff0c;给出一个ccc&#xff0c;一个序列∑kic\sum k_ic∑ki​c 每种方案贡献为∏i1nxiki\prod_{i1}^nx_i^{k_i}i1∏n​xiki​​ 解题思路…

Wannafly挑战赛18

Wannafly挑战赛18 A. 序列 先考虑暴力&#xff0c;相邻两个树之间乘上给定的三种数&#xff0c;递推出下一个位置填什么&#xff0c;然后再check一下&#xff0c;最后一位是否为1即可。这样时间显然不行&#xff0c;但是给我们一种思路&#xff0c;就是中间的转换关系&#xff…

【拓扑排序】【DP】旅行计划(luogu 1137)

旅行计划 luogu 1137 题目大意&#xff1a; 有一堆点&#xff0c;之间连接着一些边&#xff08;有向&#xff09;&#xff0c;保证无环&#xff0c;现在要求出从任意地方出发到所有点的最长路&#xff08;出发点不一定相同&#xff09; 原题&#xff1a; 题目描述 小明要…