使用批处理脚本自动生成并上传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获取Linux系统的各种信息
Jul 10 Python
Python实现的HTTP并发测试完整示例
Apr 23 Python
python制作最美应用的爬虫
Oct 28 Python
python面向对象_详谈类的继承与方法的重载
Jun 07 Python
python中lambda()的用法
Nov 16 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
对Python中的@classmethod用法详解
Apr 21 Python
Python 获取ftp服务器文件时间的方法
Jul 02 Python
如何利用Python开发一个简单的猜数字游戏
Sep 22 Python
Django实现前台上传并显示图片功能
May 29 Python
python算的上脚本语言吗
Jun 22 Python
Python调用系统命令os.system()和os.popen()的实现
Dec 31 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代码
2013/03/24 PHP
thinkphp3.2.2前后台公用类架构问题分析
2014/11/25 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
如何在Mozilla Gecko 用Javascript加载XSL
2007/01/09 Javascript
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
浅谈JavaScript的内置对象和浏览器对象
2016/06/03 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
bootstrap轮播模板使用方法详解
2017/11/17 Javascript
详解vue组件开发脚手架
2018/06/15 Javascript
vue实现打印功能的两种方法
2018/09/07 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
JS闭包原理与应用经典示例
2018/12/20 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
Python面向对象特殊成员
2017/04/24 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
简单了解python数组的基本操作
2019/11/26 Python
一文读懂Python 枚举
2020/08/25 Python
HTML5 Canvas的常用线条属性值总结
2016/03/17 HTML / CSS
html5使用canvas实现弹幕功能示例
2017/09/11 HTML / CSS
学生实习推荐信范文
2013/11/26 职场文书
财务会计专业推荐信
2013/11/30 职场文书
群众路线学习笔记范文
2014/11/06 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书
花田少年史观后感
2015/06/16 职场文书
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB