dotnet 手工打一个 dotnet tool 包

现在依靠 dotnet 平台,可以方便分发工具,利用 NuGet 服务进行分发和使用工具。打一个 dotnet tool 包,可以将这个包上传到 NuGet 上,小伙伴通过和安装 NuGet 相同方式就可以将工具安装在本机上。本文将告诉大家如何手工打一个 dotnet tool 包,方便小伙伴自己写工具用来创建代码

所有可执行项目可以打包为 dotnet tool 包,通过 dotnet xx 的命令就可以执行对应的软件。而 dotnet tool 包本身就是 NuGet 包,如果是在 dotnet 生成或 VisualStudio 中,只需要在 csporj 文件添加下面代码

        <PackAsTool>true</PackAsTool><ToolCommandName>nugetfix</ToolCommandName>

如下面代码

    <PropertyGroup><OutputType>WinExe</OutputType><TargetFramework>netcoreapp3.1</TargetFramework><UseWPF>true</UseWPF><ApplicationIcon>Icon.ico</ApplicationIcon><AssemblyName>NugetMergeFixTool</AssemblyName><RootNamespace>dotnetCampus.NugetMergeFixTool</RootNamespace><GeneratePackageOnBuild>true</GeneratePackageOnBuild><PackAsTool>true</PackAsTool><ToolCommandName>nugetfix</ToolCommandName></PropertyGroup>

然后打包就可以了

代码请看github 欢迎小伙伴访问

打包的 NuGet 包,可以通过下面命令安装

dotnet tool install --global --add-source .\bin\debug NugetMergeFixTool

接下来可以使用 nugetfix 启动这个应用,传入的命令行也可以传入应用

那么 nugetfix 这个参数是从哪里获取的?实际上在 <ToolCommandName>nugetfix</ToolCommandName> 设置的

如果我想要用 dotnet nugetfix 启动命令,那么请将 nugetfix 修改为 dotnet-nugetfix 就可以

这个 NuGet 包和其他的 NuGet 有什么不同

如果我需要手动打包,我先需要可执行文件,例如 Windows 下的 exe 文件,注意没有限制平台,也就是 Linux 也可以。这里说的可执行文件在 Windows 下可能是 dll 哦,只要通过 dotnet 命令可以启动这个 dll 就可以

我假设拿到可执行文件和他的所有依赖文件,放在 lindexi 文件夹里面

接下来就是手工打包了

创建准备打包文件夹,如 packing 文件夹,在 packing 文件夹里面创建 tools 文件夹,在 tools 文件夹创建对应框架文件夹,如 netcoreapp3.1 再创建 any 文件夹(AnyCPU) 请看下面路径

tools\netcoreapp3.1\any\

请将 lindexi 文件夹里面的所有文件放在 any 文件夹里面,需要确定 any 文件夹里面存在可执行文件,如 NugetMergeFixTool.dll 文件

接着在 any 文件夹里面创建 DotnetToolSettings.xml 文件,内容请看代码

<?xml version="1.0" encoding="utf-8"?>
<DotNetCliTool Version="1"><Commands><Command Name="nugetfix" EntryPoint="NugetMergeFixTool.dll" Runner="dotnet" /></Commands>
</DotNetCliTool>

这里 Command 的 Name 就是 nugetfix 中的命令,而 EntryPoint 就是入口文件,请将代码修改为你需要的代码

返回 packing 文件夹,创建 nuspec 文件,我期望阅读本文的小伙伴都知道 nuspec 文件应该如何写,我不会告诉大家细节

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"><metadata><id>NugetMergeFixTool</id><version>0.1.19026-alpha</version><authors>dotnet-campus</authors><owners>dotnet-campus</owners><requireLicenseAcceptance>false</requireLicenseAcceptance><license type="expression">MIT</license><licenseUrl>https://licenses.nuget.org/MIT</licenseUrl><projectUrl>https://github.com/dotnet-campus/dotnetCampus.NugetMergeFixTool</projectUrl><description>读写文件升级NuGet库,修复 NuGet 库引用</description><copyright>Copyright (c) 2020 dotnet-campus</copyright><tags>dotnet nuget msbuild</tags><packageTypes><packageType name="DotnetTool" /></packageTypes><repository type="git" url="https://github.com/dotnet-campus/dotnetCampus.NugetMergeFixTool.git" /><frameworkReferences><group targetFramework=".NETCoreApp3.1"><frameworkReference name="Microsoft.WindowsDesktop.App.WPF" /></group></frameworkReferences></metadata>
</package>

核心是 packageTypes 代码

    <packageTypes><packageType name="DotnetTool" /></packageTypes>

然后将 packing 文件夹作为压缩包,注意修改压缩包名为 id.版本.nupkg 文件

这样就完成手工打包

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

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

相关文章

数据结构--图的广度优先搜索

//图的遍历--广度优先搜索 void BreadFirstSearch(Graph g int v0){visit(v0);visited[v0] True;InitQueue(&Q);EnterQueue(&Q, v0);while(!IsEmpty(Q)){DeleteQueue(&Q, &v);w FirstAdjVertex(g, v);while(w ! -1){if(!visited[w]){visit(w);visited[w] T…

python3.6基础知识_python的基础知识

安装https://www.python.org/ftp/python/3.6.3/python-3.6.3-amd64.exe输入输出print(text)hi,我是%s,我%d岁了%(Wang,20)print(abc,def,ghi)inputName input(输出信息) inputName类型为str注释#数据类型不变对象不需声明整数浮点数字符串布尔(TrueFalse and or not运算)空值…

漫谈Linux文档属性、拥有者、群组、权限

作者&#xff1a;justmine头条号&#xff1a;大数据与云原生微信公众号&#xff1a;大数据与云原生创作不易&#xff0c;在满足创作共用版权协议的基础上可以转载&#xff0c;但请以超链接形式注明出处。为了方便阅读&#xff0c;微信公众号已按分类排版&#xff0c;后续的文章…

java foreach跳出本次循环_Java中提供三种常用的循环语句

开发工具与关键技术&#xff1a;MyEclipse 10,java作者&#xff1a;刘东标循环语句&#xff1a;满足一定条件的情况下反复执行一个操作。Java中提供三种常用的循环语句&#xff1a;1.while循环语句while先判断为真&#xff0c;再执行while循环语句&#xff0c;如果条件为假&…

数据结构--二叉树--路径 假设二叉树采用二叉链表方式存储, root指向根结点,node 指向二叉树中的一个结点, 编写函数 path,计算root到 node 之间的路径,(该路径包括root结

假设二叉树采用二叉链表方式存储&#xff0c; root指向根结点&#xff0c;node 指向二叉树中的一个结点&#xff0c; 编写函数 path&#xff0c;计算root到 node 之间的路径&#xff0c;&#xff08;该路径包括root结点和 node 结点&#xff09;。path 函数声明如下&#xff1a…

如何学习WPF技术?

本文由长沙DotNET技术社区【邹溪源】整理&#xff0c;共有7544字&#xff0c;阅读需耗时15分钟。引言在桌面开发领域&#xff0c;虽然在某些领域&#xff0c;基于electron的跨平台方案能够为我们带来某些便利&#xff0c;但是由于WPF技术能够更好的运用Direct3D带来的性能提升、…

java爬取网页数据_如何使用爬虫工具采集数据

网络爬虫是一种按照一定规则&#xff0c;自动抓取万维网数据的脚本。按照一定规则&#xff0c;指的是爬虫程序需要解析网页的dom结构&#xff0c;针对dom结构爬取自己感兴趣的数据。(图1)这就是一个网页源码的dom结构,我们需要一级一级指定抓取的标签&#xff0c;如下图:(图2)图…

二叉树-树转二叉树 使用队列,编写transfrom函数,将普通树转换成对应的二叉树。

树转二叉树 使用队列&#xff0c;编写transfrom函数&#xff0c;将普通树转换成对应的二叉树。二叉树的相关定义如下&#xff1a; typedef int DataType; typedef struct Node{DataType data;struct Node* left;struct Node* right; }BiTNode, *BiTree; 普通树节点的定义如下…

数据结构-图-邻接矩阵-试在邻接矩阵存储结构上实现图的基本操作 matrix_insert_vertex 和matrix_insert_arc-icoding

邻接矩阵 试在邻接矩阵存储结构上实现图的基本操作 matrix_insert_vertex 和matrix_insert_arc&#xff0c;相关定义如下&#xff1a; typedef int VertexType;typedef enum{DG, UDG }GraphType;typedef struct{VertexType vertex[MAX_VERTEX_NUM]; //顶点向量int arcs[MAX_V…

gRPC in ASP.NET Core 3.x - gRPC 简介(2)

前一篇&#xff1a;gRPC in ASP.NET Core 3.x - gRPC 简介&#xff08;1&#xff09;身份认证这里指的不是用户的身份认证&#xff0c;而是指多个server和client之间&#xff0c;它们如何识别出来谁是谁&#xff0c;并且能安全的进行消息传输。在身份认证这方面&#xff0c;gRP…

python实现最小二乘法的线性回归_最小二乘法求线性回归的python实现

原文&#xff1a;版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。本文链接&#xff1a;https://blog.csdn.net/qq_38003892/article/details/844951721 核心思想通过最小化方差&#xff0c;使得拟…

邻接表1 - 试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc-数据结构-图-icoding

邻接表1 试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc&#xff0c;相关定义如下&#xff1a; typedef int VertexType;typedef enum{DG, UDG }GraphType;typedef struct ArcNode {int adjvex;InfoPtr *info;struct ArcNode *nextarc;}ArcNode;typedef …

.NET Core开发实战(第8课:配置框架:让服务无缝适应各种环境)--学习笔记

08 | 配置框架&#xff1a;让服务无缝适应各种环境配置是应用程序发布到各种环境的必备能力&#xff0c;这一节开始详细讲解 ASP.NET Core 的配置框架配置框架的核心包有两个&#xff0c;一个抽象包&#xff0c;一个实现包Microsoft.Extensions.Configuration.AbstractionsMicr…

python循环遍历所有目录_python 遍历文件夹

一、os.walk()os.walk(top, topdownTrue, οnerrοrNone, followlinksFalse)可以得到一个三元tupple(dirpath, dirnames, filenames),第一个为起始路径&#xff0c;第二个为起始路径下的文件夹&#xff0c;第三个是起始路径下的文件。dirpath 是一个string&#xff0c;代表目录…

邻接表2 -试在邻接表存储结构上实现图的基本操作 del_vertex-数据结构-图-icoding

邻接表2 试在邻接表存储结构上实现图的基本操作 del_vertex&#xff0c;相关定义如下&#xff1a; typedef int VertexType;typedef enum{DG, UDG }GraphType;typedef struct ArcNode{int adjvex;InfoPtr *info;struct ArcNode *nextarc; }ArcNode;typedef struct VNode{Vert…