• 【原创】使用批处理脚本自动生成并上传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 功能, 可用于安装、创建、发布和管理包, 而无需对项目文件进行任何更改。

    1. 请访问 nuget.org/downloads,并选择 NuGet 3.3 或更高版本(2.8.6 与 Mono 不兼容)。 始终建议使用最新版。若要将包发布到 nuget.org,版本至少必须是 4.1.0。
    2. 每次下载都直接下载 nuget.exe 文件。 让浏览器将文件保存到选定文件夹。 此文件不 是安装程序;如果直接在浏览器中运行,就不会看到任何内容。
    3. 将文件夹添加到 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 脚本戳这 里,直接上代码片段。

    1. 这里我设置 nuget pack 包属性为Release,并且不自动生成,所以需要先在 Release 模式下编译完成再运行脚本。加上 -Build 参数的话输出的信息太多看得贼难受,这里把它去掉,我们自己手动编译。
    2. 填充api_key。去 nuget 官网 登录自己的帐号并创建一个 key,复制粘贴到 api_key 变量。
    3. 注意 .net framework 项目(fx)和 .net core 项目使用的命令不一样
    4. 至此我们所有的准备步骤都已完成,双击 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%
    et45TZM.XFramework
    nuget pack %startup_dir%
    et45TZM.XFrameworkTZM.XFramework.csproj -Properties Configuration=Release
    del %startup_dir%
    et45TZM.XFrameworkTZM.XFramework.nuspec
    echo=
    
    :: 打包 TZM.XFrameworkCore
    echo pack TZM.XFrameworkCore
    dotnet pack --no-build --configuration Release --output %startup_dir%.nuget %startup_dir%
    etcoreTZM.XFrameworkCoreTZM.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/

       技术交流群:816425449

  • 相关阅读:
    JAVA设计模式之观察者模式 IT
    基本的SqlPlus命令
    JAVA中SERIALVERSIONUID的解释
    msSQL
    java解析超大xml(1G),一般数据挖掘dblp.xml文件的解析
    在oracle中用sql脚本生成csv文件举例
    sql 复习知识大全2
    sql 复习知识大全1
    3.17作业解答
    3.20作业解答
  • 原文地址:https://www.cnblogs.com/yiting/p/11886327.html
Copyright © 2020-2023  润新知