使用批处理脚本自动生成并上传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类的定义、继承及类对象使用方法简明教程
May 08 Python
Python解析最简单的验证码
Jan 07 Python
Python设计模式编程中解释器模式的简单程序示例分享
Mar 02 Python
Python中运算符&quot;==&quot;和&quot;is&quot;的详解
Oct 08 Python
关于Python中Inf与Nan的判断问题详解
Feb 08 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
Feb 16 Python
python下解压缩zip文件并删除文件的实例
Apr 24 Python
Python判断是否json是否包含一个key的方法
Dec 31 Python
python二进制文件的转译详解
Jul 03 Python
python实现canny边缘检测
Sep 14 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
Jan 07 Python
解决Pytorch dataloader时报错每个tensor维度不一样的问题
May 28 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完整的日历类(CLASS)
2006/11/27 PHP
使用PHP强制下载PDF文件示例
2014/01/17 PHP
php操作csv文件代码实例汇总
2014/09/22 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
YII框架关联查询操作示例
2019/04/29 PHP
Three.js源码阅读笔记(Object3D类)
2012/12/27 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
如何使用jquery easyui创建标签组件
2015/11/18 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
js获取css的各种样式并且设置他们的方法
2017/08/22 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
python dict remove数组删除(del,pop)
2013/03/24 Python
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
linux安装Python3.4.2的操作方法
2018/09/28 Python
Windows10下 python3.7 安装 facenet的教程
2019/09/10 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
几道PHP面试题
2013/04/14 面试题
怎样让char类型的东西转换成int类型
2013/12/09 面试题
大学毕业自我评价
2014/02/02 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
mysql查询的控制语句图文详解
2021/04/11 MySQL
Python机器学习之基础概述
2021/05/19 Python