一.什么是 .NET Core Global Tools

2018年5月31日(北京时间)微软发布了 .NET Core 2.1 正式版,.NET Core 2.1 为我们带来了一个新的特性:.NET Core Global Tools。用过NodeJs的人一定对NPM不会陌生,它就是受到NPM的启发,为提供了.NET Core tools 提供了一个新的部署和扩展机制 。它是一个 .NET Core 控制台应用程序,它们是作为 NuGet 包来打包和获取的。默认情况下,这些 tools 是依赖于框架的应用程序 ,并包含其所有的 NuGet 依赖项。这意味着 .NET Core tools 默认运行在所有支持 .NET Core 的操作系统和芯片架构上,并带有一组二进制文件。默认情况下,dotnet tool install 命令会在 NuGet.org 上查找 tools 。您也可以改用您自己的 NuGet 源。

二.使用

请确保你的.NET Core SDK升级到2.1(版本号2.1.300),若没有请访问官网进行安装:https://www.microsoft.com/net/learn/get-started/windows

我们主要使用 dotnet tool 命令来进行操作:

使用情况: dotnet tool [选项] [命令]

选项:
-h, --help 显示帮助信息。 命令:
install <PACKAGE_ID> 安装在命令行上使用的工具。
uninstall <PACKAGE_ID> 卸载工具。
update <PACKAGE_ID> 将工具更新为最新稳定版本以供使用。
list 列出当前开发环境中的已安装工具。

1.命令使用:

(1).安装tool dotnet tool install -g <工具ID>

(2).卸载tool dotnet tool uninstall -g <工具ID>

(3).更新tool dotnet tool update -g <工具ID>

(4).列出本地已安装tool dotnet tool list -g

2.安装第一个tool

官方为我们提供了一个tool示例 dotnetsay,我们通过命令进行安装:

dotnet tool install -g dotnetsay

然后我们执行命令使用该工具

dotnetsay

它为我我们输出了一个机器人:

你可以访问 dotnetsay 的源码来学习如何编写 tool。

三.编写第一个.NET Core Global Tool

1.新建一个.NET Core 控制台程序

2.编写代码

我们编写一句代码,输出 “Hello .NET Core Global Tools”。

using System;

namespace HelloDotnetCoreTool
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello .NET Core Global Tools");
}
}
}

3.编辑csproj文件

选中项目->右键菜单->编辑csproj文件,在 PropertyGroup节点下加入:

<PackAsTool>true</PackAsTool>

完整示例:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
<OutputType>Exe</OutputType>
<PackAsTool>true</PackAsTool>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup> </Project>

4.编辑Nuget包信息

选中项目->右键菜单->属性->Package,编辑我们的包信息。

5.打包

我们可以使用 dotnet pack 命令来进行打包,也可以使用VS提供的菜单来进行打包:选中项目->右键菜单->打包 (项目配置选为 Release),然后在 bin\Release目录下,就可以找到我们打包的nuget包。

6.安装

打开命令提示符(cmd),进入到nuget包所在目录,执行命令进行安装:

dotnet tool install -g HelloDotnetCoreTool --add-source ./

出现如下提示表示安装成功:

然后我们使用list命令来进行查询已安装的工具列表:

dotnet tool list -g

可以看到,我们编写的工具已经安装成功了。

7.使用

我们在命令提示符(cmd)中使用命令 hellodotnetcoretool,可以输出我们刚刚编写的 “Hello .NET Core Global Tools”

四.发布到 nuget.org

我们可以将我们编写的工具发布到 nuget.org ,那么任何人都可以通过命令安装、使用我们的工具了。

使用浏览器访问:http://www.nuget.org/ ,然后注册账户进行登录。

我们选择右上角的菜单 “Upload Packages”

选择我们刚刚打包的文件进行上传就可以了:

上传以后,需要等待10分钟左右,nuget.org 会对你的包来进行验证,这个时候你是无法通过命令来安装你的工具的,只有验证通过了才行。然后再等20分钟左右,nuget.org 便会对你的工具进行索引,这个时候就能过通过搜索来访问你的工具了。

五.案例

我编写了两个实用的 .NET Core Global Tool ,在这里为大家做一下简单的介绍

1.DotnetRSA

它是一个生成RSA加密算法所需的秘钥的工具,支持生成xml、pkcs1、pkcs8三种格式,并且支持三种格式之间进行相互转换。它是一个正规的命令行应用程序。你可以使用命令来进行安装:

dotnet tool install -g dotnetrsa

详细介绍:https://www.cnblogs.com/stulzq/p/9131074.html

项目地址:https://github.com/stulzq/dotnetrsa

简单演示,生成一个 xml 格式,长度为2048的RSA秘钥

dotnetrsa gen -f xml -s 2048 -o d:\

生成的秘钥:

2.dotnet-cnblog

前面我写了一篇文章 《如何高效的编写与同步博客 (.NET Core 小工具实现)》,在里面我介绍了一个使用 .NET Core 实现的可以快速解析Markdown文件里的本地图片,并上传到博客园,同事进行内容转换然后保存到新的文件里,可以让你的博客快速的发布在博客园,不需要手动对每张图片进行上传,是一个十分方便快捷使用的小工具,现在我将它改造成了 .NET Core Global Tool,你可以使用命令来进行安装:

dotnet tool install -g dotnet-cnblog

使用方法为:

dotnet-cnblog <Markdown文件路径>

使用演示:

详细介绍以及项目地址请访问:https://github.com/stulzq/CnBlogPublishTool

六.其他工具

由 natemcmaster 维护了一个工具列表,请访问 https://github.com/natemcmaster/dotnet-tools 进行查看,我编写的dotnetrsa工具已加入此列表。

七.参考资料

如何编写.NET Core Global Tools (附两个案例)的更多相关文章

  1. [尝鲜]妈妈再也不用担心 dotnet core 程序发布了: .NET Core Global Tools

    什么是 .NET Core Global Tools? Global Tools是.NET Core 2.1 中一个初次出现的特性.Global Tools提供了一种方法,让开发人员编写的.NET C ...

  2. 如何创建一个自己的.NET Core Global Tools

    索引 NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:https://www.bitadmincore.com 框架源码:https://github.com/chenyi ...

  3. NET Core 2.1 Global Tools

    微软工程师Nate McMaster的博文.NET Core 2.1 Global Tools https://natemcmaster.com/blog/2018/05/12/dotnet-glob ...

  4. .NET Core开发日志——Global Tools

    .NET Core 2.1引入了一个新的功能,Global Tools,其本质是包含控制台应用程序的nuget包,目前而言,还没有特别有用的工具,不过相信随着时间的推移,各种有创意或者实用性强的Glo ...

  5. RHEL / CentOS Linux Install Core Development Tools Automake, Gcc (C/C++), Perl, Python & Debuggers

    how do I install all developer tools such as GNU GCC C/C++ compilers, make and others, after install ...

  6. python练习:编写一个函数isIn,接受两个字符串作为参数,如果一个字符串是另一个字符串的一部分,返回True,否则返回False。

    python练习:编写一个函数isIn,接受两个字符串作为参数,如果一个字符串是另一个字符串的一部分,返回True,否则返回False. 重难点:定义函数的方法.使用str类型的find()函数,可以 ...

  7. 使用 VSCode 编写 .NET Core 项目之初体验

    注:本文在根据 微软官方文档指导下,根据自己的学习中整理,并不完全照搬文档,但也大体和文档学习路线相似,主要为记录学习过程. 官方学习地址: https://code.visualstudio.com ...

  8. .Net Core WebApi上传图片的两种方式

    我这边主要是为了上传图片,话不多说,上代码. 方式一:通过Form表单上传 后端: /// <summary> /// 上传图片,通过Form表单提交 /// </summary&g ...

  9. 如何在vscode中编写.net core 项目(vscode)

    1.下载拓展  .NET Core Extension Pack  (作者:保哥) 这个里面将需要的插件都打包了小白一键下载就好了 2.下载扩展   vscode-solution-explorer ...

随机推荐

  1. Android项目实战(四十二):启动页优化,去除短暂白屏或黑屏

    大家会发现一个空项目,从手机桌面打开app是秒启动.但是对于自己开发的项目,有时会发现打开app的时候,会有短暂的1秒--2秒的白屏或者黑屏,然后才进入到程序界面. 个人理解为我们自己实现的Appli ...

  2. Brute-forced Euclid Distance Transform

    Sepearable 2D EDT, going to extend to 3D in order to calculate the Signed Distance Function(Field) C ...

  3. (后端)项目中的错误之java中判断字符里面含有某些字符

    数据库的数据出现了数据错误.找到原因是因为代码里面Spring的判断所导致的.其实就是判断字符里有01,走这里,有02,走那里,全是if,但是是类似indexOf的那种判断,偏偏有一个数据是0102, ...

  4. vi中的全局替换

    一.基本语法 替换命令语法: :[addr]s/源字符串/目标字符串/[option] 全局替换: :%s/源字符串/目标字符串/g 参数说明: [addr]--表示检索范围,省略时表示当前行. &q ...

  5. (一)Maven简介

    Maven这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行”,是一个跨平台的项目管理工具.Maven主要服务于基于Java平台的项目构建.依赖管理和项目信息管理. 构建(build)是每一 ...

  6. Spark性能优化【Stack Overflow】

    一.异常情况 Stack Overflow 二.异常分析 之所以会产生Stack Overflow,原因是在Stack方法栈中方法的调用链条太长的原因导致的,一般情况有两种: 1.过于深度的递归[常见 ...

  7. Eclipse启动时发生An internal error occurred duri ng: "Initializing Java Tooling ----网上的坑爹的一个方法

    补充一下: 上面的方法不行. 我的个人解决方法 出现这种问题的原因,我的是eclipse换了,工作目录还是用之前的那个 把build Automatically的钩去掉 假设我们是用之前的worksp ...

  8. SQL Server Browser探究

    一.官网关于SQL SERVER Browser服务的解释(谷歌翻译后稍作修改的): https://docs.microsoft.com/en-us/sql/tools/configuration- ...

  9. Windows Server 2016-Windows Server Backup功能

    一.Windows Server Backup 介绍: Windows Server Backup 是一种功能,它提供了一组向导和其他工具,大概从WinSer2008开始Win Ser Backup引 ...

  10. Unity基础6 Shadow Map 阴影实现

    这篇实现来的有点墨迹,前前后后折腾零碎的时间折腾了半个月才才实现一个基本的shadow map流程,只能说是对原理理解更深刻一些,但离实际应用估计还需要做很多优化.这篇文章大致分析下shadow ma ...