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

 更新时间:2019年11月19日 08:57:54   作者:TANZAME  
这篇文章主要介绍了使用批处理脚本自动生成并上传NuGet包的操作方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

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

  NuGet是什么这里就不再重复啰嗦,园子里一搜一大把。今天要跟大家分享的是,在日常开发过程中如何统一管理我们的包,如何通过批处理脚本生成包并自动上传到 NuGet。在实际项目开发过程中我们要上传自己的包,一般的步骤都是:nuget spec => nuget pack => nuget push,一个包都要至少重复三个动作,如果有 N个包那就要重复 N*3次,想想都不能忍,所以便有了今天的分享主题。

生成目录

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

下载 NuGet

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

  • 请访问nuget.org/downloads,并选择 NuGet 3.3 或更高版本(2.8.6 与 Mono 不兼容)。始终建议使用最新版。若要将包发布到 nuget.org,版本至少必须是 4.1.0。
  • 每次下载都直接下载nuget.exe文件。让浏览器将文件保存到选定文件夹。此文件不 是安装程序;如果直接在浏览器中运行,就不会看到任何内容。
  • 将文件夹添加到nuget.exe中放置 PATH 环境变量的位置,这样就可以从任意位置使用 CLI 工具。这里我们把它放在上一步新建的 .nuget文件夹下面,并设置 PATH环境变量。

生成清单

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

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

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

总结

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

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

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

相关文章

  • Python文件与文件夹常见基本操作总结

    Python文件与文件夹常见基本操作总结

    这篇文章主要介绍了Python文件与文件夹常见基本操作,结合实例形式总结分析了Python针对文件与文件夹操作所涉及的常见函数与方法的使用技巧,需要的朋友可以参考下
    2016-09-09
  • Python遍历列表时删除元素案例

    Python遍历列表时删除元素案例

    这篇文章主要介绍了Python遍历列表时删除元素案例,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-09-09
  • 浅谈python 类方法/静态方法

    浅谈python 类方法/静态方法

    这篇文章主要介绍了python 类方法/静态方法的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-09-09
  • paramiko模块安装和使用(远程登录服务器)

    paramiko模块安装和使用(远程登录服务器)

    paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接,下面学习一下它的使用方法
    2014-01-01
  • 详解如何使用Pyecharts制作Map3D

    详解如何使用Pyecharts制作Map3D

    本文基于 Python3 的 Pyecharts 制作 Map3D(三维地图) 时需要使用的设置参数和常用模板案例,使用 Pyecharts 进行数据可视化时可提供直观、交互丰富、可高度个性化定制的数据可视化图表。案例中的代码内容基于 Pyecharts 1.x 版本,需要的朋友可以参考下
    2021-06-06
  • 详解解决Python memory error的问题(四种解决方案)

    详解解决Python memory error的问题(四种解决方案)

    这篇文章主要介绍了详解解决Python memory error的问题(四种解决方案),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • python使用UDP实现客户端和服务器对话

    python使用UDP实现客户端和服务器对话

    这篇文章主要为大家介绍了python使用UDP实现客户端和服务器对话示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Python实现mysql数据库中的SQL文件生成和导入

    Python实现mysql数据库中的SQL文件生成和导入

    这篇文章主要介绍了Python实现mysql数据库中的SQL文件生成和导入,首先通过将mysql数据导出到SQL文件中展开详细内容需要的小伙伴可以参考一下
    2022-06-06
  • netbeans7安装python插件的方法图解

    netbeans7安装python插件的方法图解

    新出来的NetBeans 7.0中默认的插件中心已经没有python插件了,下面教你在netbeans7上安装python插件
    2013-12-12
  • Python实现两个list对应元素相减操作示例

    Python实现两个list对应元素相减操作示例

    这篇文章主要介绍了Python实现两个list对应元素相减操作,结合具体实例形式分析了list对应元素操作的简单实现技巧,需要的朋友可以参考下
    2017-06-06

最新评论