【原创】使用批处理脚本生成包并自动上传到nuget
Hello 大家好,我是TANZAME,我们又见面了。
NuGet 是什么这里就不再重复啰嗦,园子里一搜一大把。今天要跟大家分享的是,在日常开发过程中如何统一管理我们的包,如何通过批处理脚本生成包并自动上传到 NuGet。在实际项目开发过程中我们要上传自己的包,一般的步骤都是:nuget spec => nuget pack => nuget push,一个包都要至少重复三个动作,如果有 N 个包那就要重复 N*3 次,想想都不能忍,所以便有了今天的分享主题。
- 生成目录
既然是统一管理,生成的包自然是放在同一个文件夹,而不是分散在各个 .proj 目录里。这里我们在解决方案所在目录新建一个目录,这样做的目的是方便 bat 脚本找到解决方案下面的子项目。比如我这里新建的是 .nuget 这个目录,需要注意的是如果目录名称有特殊字符的话不能直接右键新建,需要用命令提示符,直接在解决方案所在目录使用快捷键 SHIFT + 右键 就能直接打开命令提示符,这样可以省去一大堆 cd 的操作。
- 下载 NuGet
到 NuGet 官网下载命令行接口(CLI)。nuget.exe
提供了完整的 nuget 功能, 可用于安装、创建、发布和管理包, 而无需对项目文件进行任何更改。
- 请访问 nuget.org/downloads,并选择 NuGet 3.3 或更高版本(2.8.6 与 Mono 不兼容)。 始终建议使用最新版。若要将包发布到 nuget.org,版本至少必须是 4.1.0。
- 每次下载都直接下载
nuget.exe
文件。 让浏览器将文件保存到选定文件夹。 此文件不 是安装程序;如果直接在浏览器中运行,就不会看到任何内容。 - 将文件夹添加到
nuget.exe
中放置 PATH 环境变量的位置,这样就可以从任意位置使用 CLI 工具。这里我们把它放在上一步新建的 .nuget 文件夹下面,并设置 PATH 环境变量。
- 生成清单
.nuspec文件是包含包元数据的 XML 清单, 此清单同时用于生成包以及为使用者提供信息。这个清单文件我们只需要生成一次,以后都不需要再重新生成。 .net Core 和使用sdk 特性.NET Standard 项目不需要 .nuspec 文件,如果是.net Core 和使用sdk 特性.NET Standard 项目则忽略此步骤。转到项目所在目录,SHIFT + 右键 调出命令提示符,输入 nuget spec 命令即可生成我们所需要的包元数据清单。
将这个清单文件剪切到第一步新建的 .nuget 文件夹,剪切过去后项目下面就不会凭空多出一个文件,看着清爽多了。然后做一下调整填入我们自己项目的相关信息, 比如像下面这样:
<?xml version="1.0" encoding="utf-8"?> <package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"> <metadata> <id>TZM.XFramework</id> <version>$version$</version> <title>$title$</title> <authors>$author$</authors> <owners>$author$</owners> <license type="expression">Apache-2.0</license> <projectUrl>https://github.com/TANZAME/TZM.XFramework</projectUrl> <iconUrl>http://go.microsoft.com/fwlink/?LinkID=386613</iconUrl> <description>TZM.XFramework is a lightweight and high performance object-relational mapper for .NET use the original Entity Framework api.</description> <copyright>Copyright </copyright> <tags>.NET SqlServer MSSQL Database Data O/RM ADO.NET</tags> <repository type="git" url="https://github.com/TANZAME/TZM.XFramework" /> <dependencies /> <frameworkAssemblies> <frameworkAssembly assemblyName="System.Data"/> <frameworkAssembly assemblyName="System.ComponentModel.DataAnnotations"/> <frameworkAssembly assemblyName="System.Net.Http"/> </frameworkAssemblies> </metadata> </package>
- 编写脚本
在第一步新建的文件夹里新建一个 bat 文件,重命名为 package.bat,接下来编写我们的自动脚本。完整 bat 脚本戳这 里,直接上代码片段。
- 这里我设置 nuget pack 包属性为Release,并且不自动生成,所以需要先在 Release 模式下编译完成再运行脚本。加上 -Build 参数的话输出的信息太多看得贼难受,这里把它去掉,我们自己手动编译。
- 填充api_key。去 nuget 官网 登录自己的帐号并创建一个 key,复制粘贴到 api_key 变量。
- 注意 .net framework 项目(fx)和 .net core 项目使用的命令不一样
- 至此我们所有的准备步骤都已完成,双击 package.bat 运行脚本,解放双手。
@echo off set api_key=xxxxxxlef2j57rw4q26qcrvycvznyvcurgfxbzxxxxxxxx set source_api_uri=https://api.nuget.org/v3/index.json set startup_dir=%~dp0 cd ..\ set startup_dir=%cd% cd .nuget :: 打包 TZM.XFramework -Build echo pack TZM.XFramework copy TZM.XFramework.nuspec %startup_dir%\net45\TZM.XFramework nuget pack %startup_dir%\net45\TZM.XFramework\TZM.XFramework.csproj -Properties Configuration=Release del %startup_dir%\net45\TZM.XFramework\TZM.XFramework.nuspec echo= :: 打包 TZM.XFrameworkCore echo pack TZM.XFrameworkCore dotnet pack --no-build --configuration Release --output %startup_dir%\.nuget\ %startup_dir%\netcore\TZM.XFrameworkCore\TZM.XFrameworkCore.csproj :: 批量推送包 for /R %cd% %%f in (*.nupkg) do ( echo= dotnet nuget push %%f -k %api_key% -s %source_api_uri% ) echo= pause
最后贴一张最终运行的效果图:
- 总结
通过这个脚本,我们可以在一个文件夹里统一管理我们的包,做到一键生成、上传同时保持项目文件的清爽,嗯简直不要太方便 ~..~
参考资料:https://docs.microsoft.com/zh-cn/nuget/
技术交流群:816425449
【原创】使用批处理脚本生成包并自动上传到nuget的更多相关文章
- 【原创】使用批处理脚本自动生成并上传NuGet包
Hello 大家好,我是TANZAME,我们又见面了. NuGet 是什么这里就不再重复啰嗦,园子里一搜一大把.今天要跟大家分享的是,在日常开发过程中如何统一管理我们的包,如何通过批处理脚本生成包并自 ...
- [2015-11-10]分享一个调用msbuild生成解决方案并打包发布的批处理脚本
最近工作成果之一,特此记录. 用于打包的批处理脚本 注意设置 path/to/your/solutionfile.sln 指向vs的解决方案文件. setlocal enabledelayedexpa ...
- 写完批处理脚本,再写个Gradle脚本,解放双手
前言 上一篇写个批处理来帮忙干活---遍历&字符串处理中,我们已经学习如何写批处理脚本来帮我们做一些简单的重复性工作,本篇继续来学习如何用 Gradle 写脚本,让它也来帮我们干活 Gradl ...
- FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑
FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没 ...
- DOS批处理脚本
先概述一下批处理是个什么东东.批处理的定义,至今我也没能给出一个合适的----众多高手们也都没给出----反正我不知道----看了我也不一定信服----我是个菜鸟,当然就更不用说了:但我想总结出一个“ ...
- Android测试提升效率批处理脚本(三)
前言: 前面放出过几次批处理,这次只放一个环境检查的被管理员给打回来了,不得不再找找几个有含金量的放出来,请看正文~~~ 目录 1.Android环境检查 2.Android内存监控 3.模拟蓝牙手柄 ...
- 【转】BAT 批处理脚本 教程
第一章 批处理基础第一节 常用批处理内部命令简介批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令.小知识:可以在 ...
- Android测试提升效率批处理脚本(二)
前言: 前面放出过一次批处理,本次再放出一些比较有用的批处理(获得当前包名.查看APP签名信息等),好长时没来写博客了,简单化,请看正文,更多脚本尽请期待~~~(不定期) 目录 1.[手机录屏(安卓4 ...
- BAT 批处理脚本 教程
第一章 批处理基础第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD.这些命令统称批处理命令.小知识:可以 ...
随机推荐
- Spring源码分析之IOC的三种常见用法及源码实现(一)
1.ioc核心功能bean的配置与获取api 有以下四种 (来自精通spring4.x的p175) 常用的是前三种 第一种方式 <?xml version="1.0" enc ...
- django创建表单以及表单数据类型和属性
08.15自我总结 关于django的表单不同关系之间的创建 一.不同关系之间的创建 1.一对一 举例 母表:userinfo id name age 1 张三 12 2 李四 58 字表:priva ...
- Visual Studio 生成事件这件小事
在上一篇<Visual Studio 调试技巧>中,介绍了一些VS常用的调试操作,今天,聊一聊VS当中一个不太常见,但有时又有妙用的操作——VS生成事件. 一.什么是VS生成事件 简单来说 ...
- QT文件读写操作笔记
补一下这部分的笔记 简单的东西也记一下 操作系统一般都会提供一些列的标准对话框,如文件选择.字体选择.颜色选择等,这些标准对话框为应用层序提供了一致的观感.Qt对这些标准对话框都定义了相关的类,如:Q ...
- Oracle数据库提权(低权限提升至dba)
0x01 Oracle存储过程”缺陷” 在 Oracle 的存储过程中,有一个有趣的特点:运行权限.运行权限分为两种,definer 和 invoker. definer 为函数创建者的权限,而 in ...
- window 下Notepad++设置为文本文件的默认打开程序失败
1.右键Notepad++的可执行程序,选择"属性" -- "兼容性" , 设置Notepad++以管理员的身份运行 2.打开Notepad++ ," ...
- [Luogu3797] 妖梦斩木棒
题目背景 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了一支非常长的木棒,妖梦把它们切成了等长的n段.现在这个木棒可以看做由三种小段构成,中间的 ...
- 小白学 Python(9):基础数据结构(列表)(上)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- 数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优.但是一些"不好"的SQL也会导致数据库查询变慢,影响业务流程.本文从SQL角度进行数据库优化,提升SQ ...
- IE8下Extjs报缺少':'符号错误
先介绍下这个问题的由来: 上午其他项目组人员在rtx上问,求帮忙解决ie8兼容性问题. 然后快到饭点,知道这个bug肯定不是那么好解决,肯定不能耽误吃饭时间. 果断说,下午来弄. 下午3点开始去看这个 ...