使用批处理脚本自动生成并上传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排序方法实例分析
Apr 30 Python
python爬虫入门教程--利用requests构建知乎API(三)
May 25 Python
基于Python闭包及其作用域详解
Aug 28 Python
Python中的默认参数实例分析
Jan 29 Python
使用Python获取网段IP个数以及地址清单的方法
Nov 01 Python
Python中Unittest框架的具体使用
Aug 27 Python
GDAL 矢量属性数据修改方式(python)
Mar 10 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
pip安装tensorflow的坑的解决
Apr 19 Python
Selenium 配置启动项参数的方法
Dec 04 Python
Python基于mediainfo批量重命名图片文件
Dec 29 Python
OpenCV-Python模板匹配人眼的实例
Jun 08 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安全性问题中的:Null 字符问题
2013/06/21 PHP
改写函数实现PHP二维/三维数组转字符串
2013/09/13 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
为javascript添加String.Format方法
2020/08/11 Javascript
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
[36:33]Ti4 循环赛第四日 附加赛NEWBEE vs Mouz
2014/07/13 DOTA
python中关于日期时间处理的问答集锦
2013/03/08 Python
Python入门篇之条件、循环
2014/10/17 Python
Python基础知识_浅谈用户交互
2017/05/31 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
Python3中关于cookie的创建与保存
2018/10/21 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
Python 炫技操作之合并字典的七种方法
2020/04/10 Python
Python模块常用四种安装方式
2020/10/20 Python
HTML5新增加的功能详解
2016/09/05 HTML / CSS
大学军训感言
2014/01/10 职场文书
小学亲子活动总结
2014/07/01 职场文书
党员群众路线对照检查材料
2014/08/31 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
高效课堂教学反思
2016/02/24 职场文书
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
2022/12/24 HTML / CSS