使用批处理脚本自动生成并上传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实现自动为照片添加日期并分类的方法
Sep 30 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
Feb 07 Python
对python:threading.Thread类的使用方法详解
Jan 31 Python
详解django2中关于时间处理策略
Mar 06 Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
Python中itertools的用法详解
Feb 07 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
Jun 12 Python
Python实现GIF图倒放
Jul 16 Python
Python自动登录QQ的实现示例
Aug 28 Python
方法汇总:Python 安装第三方库常用
Apr 26 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自动更新新闻DIY
2006/10/09 PHP
基于mysql的论坛(6)
2006/10/09 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
2013/01/15 Javascript
自己封装的javascript事件队列函数版
2014/06/12 Javascript
jQuery表格列宽可拖拽改变且兼容firfox
2014/09/03 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
由ReactJS的Hello world说开来
2015/07/02 Javascript
深入剖析JavaScript编程中的对象概念
2015/10/21 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
详解webpack的配置文件entry与output
2017/08/21 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
理解Python中函数的参数
2015/04/27 Python
剖析Django中模版标签的解析与参数传递
2015/07/21 Python
python实现图片文件批量重命名
2020/03/23 Python
python 函数内部修改外部变量的方法
2018/12/18 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
Python字符串格式化输出代码实例
2019/11/22 Python
Python可以实现栈的结构吗
2020/05/27 Python
基于python实现删除指定文件类型
2020/07/21 Python
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
法律六进活动方案
2014/03/13 职场文书
ktv筹备计划书
2014/05/03 职场文书
新疆民族团结演讲稿
2014/08/27 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
2014教师年度工作总结
2014/11/10 职场文书
关于倡议书的范文
2015/04/29 职场文书
springboot layui hutool Excel导入的实现
2022/03/31 Java/Android
GO中sync包自由控制并发示例详解
2022/08/05 Golang