[Cake] 3. dotnet 本地工具 cake & dotnet format
在上一篇[Cake] 2. dotnet 全局工具 cake中介绍了通过.Net Core 2.1 的全局工具dotnet tool
命令来简化cake的安装和使用。因为是全局安装,则无法适应每个项目对特定版本的要求。随着.Net Core 3.0中增加的对本地工具(项目级别)的支持,使得这一问题得以解决。
1. cake的安装和还原
# 创建一个本地的工具清单文件
dotnet new tool-manifest
# 安装本地工具
dotnet tool install cake.tool --version 0.35.0
dotnet new tool-manifest
命令会在当前目录下创建一个.config/dotnet-tools.json
的文件。当我们执行dotnet tool install cake.tool
时,就会把cake.tool
的相关信息写入到这个文件。
{
"version": 1,
"isRoot": true,
"tools": {
"cake.tool": {
"version": "0.35.0",
"commands": [
"dotnet-cake"
]
},
"dotnet-format": {
"version": "3.1.37601",
"commands": [
"dotnet-format"
]
}
}
}
之后就可以执行dotnet cake
(或者dotnet tool run dotnet-cake
)命令了。
$ dotnet cake --help
Usage: Cake.exe [script] [--target=value] [--verbosity=value]
[--showdescription] [--dryrun] [..]
Example: Cake.exe
Example: Cake.exe build.cake --verbosity=quiet
Example: Cake.exe build.cake --showdescription
Options:
--target <TARGET> Target task to invoke. Script must support this explicitly.
--verbosity=value Specifies the amount of information to be displayed.
(Quiet, Minimal, Normal, Verbose, Diagnostic)
--debug Performs a debug.
--showdescription Shows description about tasks.
--showtree Shows the task dependency tree.
--dryrun Performs a dry run.
--exclusive Execute a single task without any dependencies.
--bootstrap Download/install modules defined by #module directives
--version Displays version information.
--info Displays additional information about Cake execution.
--help Displays usage information.
当我们在CI/CD或者另外一个环境上时,只需要执行
dotnet tool restore
就可以把.config/dotnet-tools.json
文件中配置的相关工具安装在本地了。
2. dotnet format 格式化
介绍一下另外一个非常有用的工具dotnet-format。看下官方介绍:
dotnet-format is a code formatter for dotnet that applies style preferences to a project or solution. Preferences will be read from an .editorconfig file, if present, otherwise a default set of preferences will be used. At this time dotnet-format is able to format C# and Visual Basic projects with a subset of supported .editorconfig options.
它会使用.editorconfig中的格式化配置,来统一项目的文件编码和格式。 安装方式同上面的cake一样。
# 安装
dotnet tool install dotnet-format
# 检查并保存
dotnet format
# 只检查不保存,检查失败则返回非0的exit code
dotnet format --check --dry-run
结合CI使用非常方便,当你push的代码不符合格式要求时就直接失败了(一个失败的示例:https://github.com/linianhui/cake.example/commit/471f58754c390cb9946a5282c6d73275b90549d9/checks?check_suite_id=361927437)。
示例,它会提示出那些地方不符合.editorconfig
的要求:
$ dotnet format --check --dry-run
1-src/Cake.Example/Animals/Cat.cs(17,2): Add final newline.
1-src/Cake.Example/Animals/Dog.cs(17,2): Add final newline.
1-src/Cake.Example/IAnimal.cs(14,2): Add final newline.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(18,2): Add final newline.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(18,2): Add final newline.
1-src/Cake.Example/Animals/Cat.cs(1,31): Fix end of line marker.
1-src/Cake.Example/Animals/Cat.cs(2,2): Fix end of line marker.
1-src/Cake.Example/Animals/Cat.cs(3,18): Fix end of line marker.
1-src/Cake.Example/Animals/Cat.cs(4,12): Fix end of line marker.
1-src/Cake.Example/Animals/Cat.cs(5,19): Fix end of line marker.
1-src/Cake.Example/Animals/Cat.cs(6,38): Fix end of line marker.
1-src/Cake.Example/Animals/Cat.cs(7,6): Fix end of line marker.
1-src/Cake.Example/Animals/Cat.cs(8,22): Fix end of line marker.
1-src/Cake.Example/Animals/Cat.cs(9,15): Fix end of line marker.
1-src/Cake.Example/Animals/Cat.cs(10,23): Fix end of line marker.
1-src/Cake.Example/Animals/Cat.cs(11,32): Fix end of line marker.
1-src/Cake.Example/Animals/Cat.cs(12,29): Fix end of line marker.
1-src/Cake.Example/Animals/Cat.cs(13,10): Fix end of line marker.
1-src/Cake.Example/Animals/Cat.cs(14,25): Fix end of line marker.
1-src/Cake.Example/Animals/Cat.cs(15,10): Fix end of line marker.
1-src/Cake.Example/Animals/Cat.cs(16,6): Fix end of line marker.
1-src/Cake.Example/Animals/Dog.cs(1,31): Fix end of line marker.
1-src/Cake.Example/Animals/Dog.cs(2,2): Fix end of line marker.
1-src/Cake.Example/Animals/Dog.cs(3,18): Fix end of line marker.
1-src/Cake.Example/Animals/Dog.cs(4,11): Fix end of line marker.
1-src/Cake.Example/Animals/Dog.cs(5,19): Fix end of line marker.
1-src/Cake.Example/Animals/Dog.cs(6,38): Fix end of line marker.
1-src/Cake.Example/Animals/Dog.cs(7,6): Fix end of line marker.
1-src/Cake.Example/Animals/Dog.cs(8,22): Fix end of line marker.
1-src/Cake.Example/Animals/Dog.cs(9,15): Fix end of line marker.
1-src/Cake.Example/Animals/Dog.cs(10,23): Fix end of line marker.
1-src/Cake.Example/Animals/Dog.cs(11,32): Fix end of line marker.
1-src/Cake.Example/Animals/Dog.cs(12,29): Fix end of line marker.
1-src/Cake.Example/Animals/Dog.cs(13,10): Fix end of line marker.
1-src/Cake.Example/Animals/Dog.cs(14,25): Fix end of line marker.
1-src/Cake.Example/Animals/Dog.cs(15,10): Fix end of line marker.
1-src/Cake.Example/Animals/Dog.cs(16,6): Fix end of line marker.
1-src/Cake.Example/IAnimal.cs(1,23): Fix end of line marker.
1-src/Cake.Example/IAnimal.cs(2,2): Fix end of line marker.
1-src/Cake.Example/IAnimal.cs(3,18): Fix end of line marker.
1-src/Cake.Example/IAnimal.cs(4,13): Fix end of line marker.
1-src/Cake.Example/IAnimal.cs(5,19): Fix end of line marker.
1-src/Cake.Example/IAnimal.cs(6,29): Fix end of line marker.
1-src/Cake.Example/IAnimal.cs(7,6): Fix end of line marker.
1-src/Cake.Example/IAnimal.cs(8,22): Fix end of line marker.
1-src/Cake.Example/IAnimal.cs(9,16): Fix end of line marker.
1-src/Cake.Example/IAnimal.cs(10,23): Fix end of line marker.
1-src/Cake.Example/IAnimal.cs(11,32): Fix end of line marker.
1-src/Cake.Example/IAnimal.cs(12,23): Fix end of line marker.
1-src/Cake.Example/IAnimal.cs(13,6): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(1,28): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(2,13): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(2,13): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(4,42): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(5,2): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(6,32): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(7,6): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(8,15): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(9,39): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(10,10): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(11,40): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(11,40): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(13,40): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(13,40): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(15,40): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(16,10): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/CatTest.cs(17,6): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(1,28): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(2,13): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(2,13): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(4,42): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(5,2): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(6,32): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(7,6): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(8,15): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(9,39): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(10,10): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(11,40): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(11,40): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(13,40): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(13,40): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(15,40): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(16,10): Fix end of line marker.
2-test/Cake.Example.Tests/AnimalsTests/DotTest.cs(17,6): Fix end of line marker.
Formatted code file 'Cat.cs'.
Formatted code file 'Dog.cs'.
Formatted code file 'IAnimal.cs'.
Formatted code file 'CatTest.cs'.
Formatted code file 'DotTest.cs'.
Format complete in 3529ms.
dotnet-foramt
支持的.editorconfig
信息比较丰富,具体的参考 https://github.com/dotnet/format/wiki/Supported-.editorconfig-options 的说明,这里也贴一个我在使用的.editorconfig
:
https://github.com/linianhui/code.guide/blob/master/csharp/.editorconfig
3. 参考
源码: https://github.com/linianhui/cake.example
我的.editorconfig
: https://github.com/linianhui/code.guide/blob/master/csharp/.editorconfig
https://github.com/dotnet/format/wiki/Supported-.editorconfig-options
https://docs.microsoft.com/en-us/dotnet/core/whats-new/dotnet-core-3-0#local-tools
https://github.com/dotnet/format
[Cake] 3. dotnet 本地工具 cake & dotnet format的更多相关文章
- [Cake] 2. dotnet 全局工具 cake
在上篇博客[Cake] 1. CI中的Cake中介绍了如何在CI中利用Cake来保持与CI/CD环境的解耦. 1. 简化cake的安装 当时dotnet 2.1还未正式发布,dotnet 还没有工具的 ...
- dotnet CLI工具是如何运行你的代码的
原文连接:https://mattwarren.org/2016/07/04/How-the-dotnet-CLI-tooling-runs-your-code/作者 Matt Warren.授权翻译 ...
- [Cake] 1. CI中的Cake
在上一篇C#Make自动化构建-简介中,简单的介绍了下Cake的脚本如何编写以及通过Powershell在本地运行Cake脚本.本篇在此基础上,介绍下如何在CI环境中使用Cake. 1. Cake简介 ...
- .NET Core 3.0 本地工具
.NET Core从最早期的版本就开始支持全局工具了.如果仅仅需要在某个项目中或某个文件夹中使用特定的工具,那么.NET Core 3.0就允许您这样做. 使用.NET Core 3.0,您可以在特定 ...
- X86上搭建交叉工具链,来给龙芯笔记本编译本地工具链(未完待续)
故事的背景是,我买了一台龙芯2F的笔记本来装B. 为什么说是装B呢?因为不但操作系统是Linux,而且CPU还是龙芯的. 一般人有这么酷的装备吗?简直是装B大圣啊. 这里一定要申明一点,本人不是IT技 ...
- X86给龙芯笔记本编译本地工具链(未完待续)
我买了一台龙芯2F的笔记本来当玩具. 买回来发现,这台笔记本上没法安装软件,因为既没有软件仓库,也没有GCC. 因此需要构建交叉工具链和构建本地工具链. 下面是我研究如何搞定着一切的笔记. 工具链组件 ...
- 【dotnet跨平台】"dotnet restore"和"dotnet run"都做了些什么?
[dotnet跨平台]"dotnet restore"和"dotnet run"都做了些什么? 前言: 关于dotnet跨平台的相关内容.能够參考:跨平台.NE ...
- 解决本地工具无法连接服务器上的mysql的问题
当本地工具尝试连接服务器的时候,如果出现无法连接的情况,可能是权限没有开. 首先: mysql> show databases: 发现有mysql数据库 进入该数据库,找到user表 mysq ...
- .net core下的dotnet全局工具
.net core 2.1后支持了一个全新的部署和扩展命令,可以自己注册全局命令行. dotnet install tool -g dotnetsaydotnetsay 也可以自己构建自己的命令行,一 ...
随机推荐
- 自制window下core animation引擎 - demo第二弹 - 仿QQ电脑管家加速小火箭
一年前想写一个像cocoa那样,可以方便层动画开发的引擎,写着写着又逆向它的QuartzCore.framework,也就是CoreAnimation的底层,已经大半年没有搞windows这个引擎.大 ...
- 1142 CREATE VIEW command denied to user 'blog'@'XXX.XXX.XXX.XXX' for table 'Articles'
创建视图时,报如上的1142错误,是数据库权限设置的问题. 进入mysql的root用户,赋予所有权限即可: mysql>grant all privileges on blogDB.* to ...
- 【Linux系列】Centos7安装Samba并将工作区挂载到win(八)
目的 本文主要介绍以下两点: 一. 安装Samba 二. 挂载到window 演示 一. 安装Samba Samba是基于smb协议的,主要作用是实现跨平台文件传输. 安装 yum install - ...
- DexOpt相关的异常
查找的资料 dvm探讨之odex绕过 DexClassLoader4.4.2动态加载分析(磁盘加载分析) - ::): DexOpt: incorrect opt magic number (0xff ...
- PHP安全之道学习笔记2:编码安全指南
编码安全指南 编程本身就应该是一门艺术,而安全编程更是一种在刀尖上舞蹈的艺术,不仅要小心脚下的锋利寒刃,更要小心来自网络黑客或攻击者的狂轰乱炸. - by code artist 1.hash比较的缺 ...
- linux shell编程之变量和bash配置文件(第一篇)
编程语言有两类 强类型:如C语言.数据具有其特定的类型,先声明定义后才能使用.数据运算时必须符合类型要求(如不能把字符串类型数据直接与整型数据做算数运算) 弱类型:如shell.数据默认为字符型,不用 ...
- 题解——面积(area.cpp)
题目来源&题面简述: 思路与算法选择: 只有*里面的部分对我们有用,所以可以将 *号外的部分标记一下. 可以用著名的BFS大法实现此过程.(连通块) 连通块模板: #include<bi ...
- python网络爬虫之自动化测试工具selenium[二]
目录 前言 一.获取今日头条的评论信息(request请求获取json) 1.分析数据 2.获取数据 二.获取今日头条的评论信息(selenium请求获取) 1.分析数据 2.获取数据 房源案例(仅供 ...
- Java 虚拟机结构
一 数据类型 与 Java 程序语言中的数据类型相似,Java 虚拟机可以操作的数据类型可分为两类:原始类型(Primitive Types,也经常翻译为原生类型或者基本类型)和引用类型(Refere ...
- 详解在Linux系统中安装Tomcat
本文以在CentOS 7.6中安装Tomcat8.5为例进行安装,其他系统和版本都是大同小异的. 安装JDK 安装Tomcat之前,需要先安装JDK,可以参看之前的文章详解在Linux系统中安装JDK ...