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,一经查实,立即删除!

相关文章

漫谈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;如果条件为假&…

如何学习WPF技术?

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

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

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

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…

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

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

【译】探索更轻量的Electron替代品来托管Blazor桌面应用程序

本文翻译自 ASP.NET 项目组的 Steve Sanderson 的博客&#xff0c;发表于 2019 年 11 月 1 日。Steve Sanderson 是 Blazor 最早的创造者。这篇文章发布后还有一篇后续&#xff0c;是介绍一个在本文提到的跨平台 webview 概念的落地项目 WebWindow &#xff0c;我也会接着翻译过…

mysql 剔除不可见字符_不可见字符,Excel里最隐蔽的坑

小伙伴们好啊&#xff0c;我是流浪铁匠&#xff0c;今天为大家介绍的是excel数据整理时一类最常见的坑——不可见字符。从unichar函数对应的uincode字符集结果来说&#xff0c;excel大约有111万个字符&#xff0c;其中有不少字符的性质千奇百怪&#xff0c;由于unichar/unicode…

同为Chromium浏览器,Edge却被“特别关照”

谷歌会在 Microsoft Edge 用户访问 Chrome Web Store&#xff08;Chrome 网上应用商店&#xff09; 时发去一条通知提醒&#xff0c;建议用户切换到 Google Chrome 以安全地使用扩展程序&#xff0c;通知还提供了下载 Google Chrome 的链接。不过有趣的是&#xff0c;其他 Chro…

噪声与振动控制工程手册_声学分享客噪声与振动控制篇大型隔振工程案例介绍...

第一期《声学分享客--噪声与振动控制篇》将于今日上午10&#xff1a;00~11&#xff1a;00&#xff0c;在线直播&#xff0c;欢迎各位上线交流。主讲人&#xff1a;苏宏兵报告内容&#xff1a;大型隔振工程案例介绍报告人介绍&#xff1a;苏宏兵&#xff0c;工学硕士&#xff0c…

微软推出全新的Windows 10系统图标

微软已开始通过 Fast Ring 向 Insider 用户推出新的 Windows 10 系统图标&#xff0c;这些新图标基于 Fluent 设计。更改从邮件和日历等程序开始&#xff0c;微软将陆续推出更多彩色图标。这些图标将在接下来的几个月中通过 Microsoft Store 的应用更新和 Windows 10 的发布预览…