在上一篇[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://editorconfig.org/

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的更多相关文章

  1. [Cake] 2. dotnet 全局工具 cake

    在上篇博客[Cake] 1. CI中的Cake中介绍了如何在CI中利用Cake来保持与CI/CD环境的解耦. 1. 简化cake的安装 当时dotnet 2.1还未正式发布,dotnet 还没有工具的 ...

  2. dotnet CLI工具是如何运行你的代码的

    原文连接:https://mattwarren.org/2016/07/04/How-the-dotnet-CLI-tooling-runs-your-code/作者 Matt Warren.授权翻译 ...

  3. [Cake] 1. CI中的Cake

    在上一篇C#Make自动化构建-简介中,简单的介绍了下Cake的脚本如何编写以及通过Powershell在本地运行Cake脚本.本篇在此基础上,介绍下如何在CI环境中使用Cake. 1. Cake简介 ...

  4. .NET Core 3.0 本地工具

    .NET Core从最早期的版本就开始支持全局工具了.如果仅仅需要在某个项目中或某个文件夹中使用特定的工具,那么.NET Core 3.0就允许您这样做. 使用.NET Core 3.0,您可以在特定 ...

  5. X86上搭建交叉工具链,来给龙芯笔记本编译本地工具链(未完待续)

    故事的背景是,我买了一台龙芯2F的笔记本来装B. 为什么说是装B呢?因为不但操作系统是Linux,而且CPU还是龙芯的. 一般人有这么酷的装备吗?简直是装B大圣啊. 这里一定要申明一点,本人不是IT技 ...

  6. X86给龙芯笔记本编译本地工具链(未完待续)

    我买了一台龙芯2F的笔记本来当玩具. 买回来发现,这台笔记本上没法安装软件,因为既没有软件仓库,也没有GCC. 因此需要构建交叉工具链和构建本地工具链. 下面是我研究如何搞定着一切的笔记. 工具链组件 ...

  7. 【dotnet跨平台】&quot;dotnet restore&quot;和&quot;dotnet run&quot;都做了些什么?

    [dotnet跨平台]"dotnet restore"和"dotnet run"都做了些什么? 前言: 关于dotnet跨平台的相关内容.能够參考:跨平台.NE ...

  8. 解决本地工具无法连接服务器上的mysql的问题

    当本地工具尝试连接服务器的时候,如果出现无法连接的情况,可能是权限没有开. 首先: mysql> show  databases: 发现有mysql数据库 进入该数据库,找到user表 mysq ...

  9. .net core下的dotnet全局工具

    .net core 2.1后支持了一个全新的部署和扩展命令,可以自己注册全局命令行. dotnet install tool -g dotnetsaydotnetsay 也可以自己构建自己的命令行,一 ...

随机推荐

  1. Asp.net Core 系列之--5.认证、授权与自定义权限的实现

    ChuanGoing 2019-11-24 asp.net core系列已经来到了第五篇,通过之前的基础介绍,我们了解了事件订阅/发布的eventbus整个流程,初探dapper ORM实现,并且简单 ...

  2. 护网杯一道crypto

    import os def xor(a,b): assert len(a)==len(b) c="" for i in range(len(a)): c+=chr(ord(a[i] ...

  3. 用Helm3构建多层微服务

    Helm是一款非常流行的k8s包管理工具.以前就一直想用它,但看到它产生的文件比k8s要复杂许多,就一直犹豫,不知道它的好处能不能抵消掉它的复杂度.但如果不用,而是用Kubectl来进行调式真的很麻烦 ...

  4. Android 如何动态添加 View 并显示在指定位置。

    引子 最近,在做产品的需求的时候,遇到 PM 要求在某个按钮上添加一个新手引导动画,引导用户去点击.作为 RD,我哗啦啦的就写好相关逻辑了.自测完成后,提测,PM Review 效果. 看完后,PM ...

  5. SpringMVC配置了拦截器(interceptors)却显示不出css、js样式的解决办法

    首先因为在web.xml里面配置了 <filter-mapping> <filter-name>characterEncodingFilter</filter-name& ...

  6. solr数据操作

    本文介绍solr的基本数据操作,基于solr 8.2.solr支持多种数据格式,包括XML,JSON,CSV等,并提供多种脚本和工具来操作数据.本文讲解curl请求和JSON数据格式的处理方式. 本文 ...

  7. 数据降维-NMF非负矩阵分解

    1.什么是非负矩阵分解? NMF的基本思想可以简单描述为:对于任意给定的一个非负矩阵V,NMF算法能够寻找到一个非负矩阵W和一个非负矩阵H,使得满足 ,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积 ...

  8. 安装iris框架

    1.导语 目前Go语言已经为大多数人所熟知,越来越多的开发人员选择使用Go语言来进行开发,但是如何使用 Go来进行web开发,在其他编程语言中都有对应的开发框架,当然在Go中也有,就是即将要介绍的-- ...

  9. desc和show

    desc只能查看表结构 查看zx1表结构 desc zx1; mysql> desc zx1 -> ; +---------+---------+------+-----+-------- ...

  10. react可拖动的好用的树结构插件

    react tree 可拖动树结构: github地址: github地址:react-sortable-tree 安装: NPM npm install react-sortable-tree –s ...