使用批处理脚本自动生成并上传NuGet包(操作方法)


Posted in Python onNovember 19, 2019

Hello 大家好,我是TANZAME,我们又见面了。

NuGet是什么这里就不再重复??拢?白永镆凰岩淮蟀选=裉煲??蠹曳窒淼氖牵?谌粘??⒐?讨腥绾瓮骋还芾砦颐堑陌??绾瓮ü???斫疟旧?砂?⒆远?洗? NuGet。在实际项目开发过程中我们要上传自己的包,一般的步骤都是:nuget spec => nuget pack => nuget push,一个包都要至少重复三个动作,如果有 N个包那就要重复 N*3次,想想都不能忍,所以便有了今天的分享主题。

生成目录

既然是统一管理,生成的包自然是放在同一个文件夹,而不是分散在各个 .proj目录里。这里我们在解决方案所在目录新建一个目录,这样做的目的是方便 bat脚本找到解决方案下面的子项目。比如我这里新建的是 .nuget这个目录,需要注意的是如果目录名称有特殊字符的话不能直接右键新建,需要用命令提示符,直接在解决方案所在目录使用快捷键 SHIFT +右键就能直接打开命令提示符,这样可以省去一大堆 cd的操作。

使用批处理脚本自动生成并上传NuGet包(操作方法)

下载 NuGet

到 NuGet 官网下载命令行接口(CLI)。nuget.exe提供了完整的 nuget 功能, 可用于安装、创建、发布和管理包, 而无需对项目文件进行任何更改。

使用批处理脚本自动生成并上传NuGet包(操作方法)

生成清单

.nuspec文件是包含包元数据的 XML 清单, 此清单同时用于生成包以及为使用者提供信息。这个清单文件我们只需要生成一次,以后都不需要再重新生成。.net Core 和使用sdk 特性.NET Standard 项目不需要 .nuspec 文件,如果是.net Core 和使用sdk 特性.NET Standard 项目则忽略此步骤。转到项目所在目录,SHIFT +右键调出命令提示符,输入 nuget spec命令即可生成我们所需要的包元数据清单。

使用批处理脚本自动生成并上传NuGet包(操作方法)

将这个清单文件剪切到第一步新建的 .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 2019</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

最后贴一张最终运行的效果图:

使用批处理脚本自动生成并上传NuGet包(操作方法)

总结

 通过这个脚本,我们可以在一个文件夹里统一管理我们的包,做到一键生成、上传同时保持项目文件的清爽,嗯简直不要太方便 ~..~

  参考资料:https://docs.microsoft.com/zh-cn/nuget/

以上所述是小编给大家介绍的使用批处理脚本自动生成并上传NuGet包,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python扫描proxy并获取可用代理ip的实例
Aug 07 Python
python实现ID3决策树算法
Dec 20 Python
python版微信跳一跳游戏辅助
Jan 11 Python
Django contenttypes 框架详解(小结)
Aug 13 Python
详解Python的数据库操作(pymysql)
Apr 04 Python
Python 循环终止语句的三种方法小结
Jun 24 Python
Django使用Jinja2模板引擎的示例代码
Aug 09 Python
使用Python生成200个激活码的实现方法
Nov 22 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
Python:__eq__和__str__函数的使用示例
Sep 26 Python
Linux系统下升级pip的完整步骤
Jan 31 Python
理解深度学习之深度学习简介
Apr 14 Python
python flask搭建web应用教程
Nov 19 #Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 #Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 #Python
python tornado修改log输出方式
Nov 18 #Python
Python3常用内置方法代码实例
Nov 18 #Python
python tornado使用流生成图片的例子
Nov 18 #Python
解决pandas展示数据输出时列名不能对齐的问题
Nov 18 #Python
You might like
php的一些小问题
2010/07/03 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
php解决约瑟夫环示例
2014/04/09 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
2014/12/31 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
2015/08/20 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
2016/12/26 Javascript
jQuery html表格排序插件tablesorter使用方法详解
2017/02/10 Javascript
简述JS浏览器的三种弹窗
2018/07/15 Javascript
详解webpack打包后如何调试的方法步骤
2018/11/07 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
python ddt数据驱动最简实例代码
2019/02/22 Python
python+tkinter实现学生管理系统
2019/08/20 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
2020/03/23 Python
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
清除canvas画布内容(点擦除+线擦除)
2020/08/12 HTML / CSS
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
2014年群众路线党员自我评议
2014/09/24 职场文书
银行领导班子四风对照检查材料
2014/09/27 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2014年幼儿园园务工作总结
2014/12/05 职场文书
保安辞职信范文
2015/02/28 职场文书
巴黎圣母院观后感
2015/06/10 职场文书
python实现监听键盘
2021/04/26 Python
MySQL查询日期时间
2022/05/15 MySQL