zoukankan      html  css  js  c++  java
  • 使用NuGet发布自己的.NET NuGet 包( .NET Standard & Windows)

    发布自己的nuget包

    STEP 1:获取API Key

    首先,你需要到NuGet上注册一个新的账号,然后在My Account页面,获取一个API Key,或者是自建服务器上生成一个API Key(我没有自建服务器,所以这个过程我不太清楚,直接问你们公司的IT要呗)

    STEP 2:部署本地NuGet.exe

    NuGet有个命令行工具:NuGet.exe,通过该工具,在CMD中通过命令行可以实现你要的所有功能。

    为了方便使用,请设置机器的PATH环境变量,自己选一个路径把NuGet.exe放里面,然后把该路径注册的PATH环境变量,重启计算机。

    STEP 3:设置API Key

    在cmd命令行工具中使用以下命令设置NuGet API Key:

    > setApiKey <my_api_key>

    设置了这个API Key后你的计算机会吧该key记住,在后面进行推送的时候会使用该key进行验证操作

    STEP 4:开发自己的类库(Class Library)

    我开发的是一个C#的类库,开发完成后在Properties下的AssemblyInfo.cs里面吧相关信息完善,打包的时候nuget会获取这里面的信息,然后编译生成该项目

    STEP 5:打包(生成清单文件)

    打开CMD窗口,通过cd命令切换到*.csproj(我的是NuGet.lyh.Practice.csproj)目录下,通过以下命令生成打包的清单文件

    > nuget spec

    执行完你会看到NuGet.lyh.Practice.csproj目录下多了一个NuGet.lyh.Practice.nuspec文件。

    手动打开NuGet.lyh.Practice.nuspec文件,把需要替换的信息替换掉,不需要的tag全部删掉,注意里面的$xxx$宏,这些就是引用了AssemblyInfo.cs中的设置值,在编译产生package的时候,会使用AssemblyInfo.cs中的相应值进行替换。

    注意两点:

    1、$description$使用AssemblyDescriptionAttribute的值进行替换,在产生package之前,一定要记得先编译项目,否则会提示$description$找不到的错误;

    2、releaseNotes如果没有,就直接删掉这个节点,如果有,则填入自己的内容,不要使用默认内容,否则会在下一步产生警告信息。

    STEP 6:打包(生成*.nupkg包)

    在cmd窗口中使用如下命令打包生成*.nupkg包

    nuget pack NuGet.lyh.Practice.csproj

    nuget pack NuGet.lyh.Practice.csproj –IncludeReferencedProjects    打包时包含引用的项目

    nuget pack NuGet.lyh.Practice.csproj -Prop Configuration=Release   打包release的dll,默认打包的是debug目录下的dll

    执行完成后会发现多了一个NuGet.lyh.Practice.1.0.1.nupkg文件,到这里就成功的生成了nupkg包了

    STEP 7:发布自己的类库

    如果你执行了步骤三,你的ApiKey已经记在系统中了,使用如下命令就可以将*.nupkg包推送到nuget.org服务器了

    > nuget push NuGet.lyh.Practice.1.0.1.nupkg –Source nuget.org (步骤三,你的ApiKey已经记在系统中)

    > nuget push NuGet.lyh.Practice.1.0.1.nupkg {ApiKey} –Source nuget.org  (明确指定ApiKey)

    如果你是自建了服务器的话把Source参数nuget.org 修改成你自己的服务器地址就行了

    比如我们公司的服务器nuget地址是http://192.1.1.1:1000/nuget那么我使用下面这条命令进行推送

    > nuget.exe push {package file} {apikey} -Source http://192.1.1.1:1000/nuget

    同一个名字同一个版本的包只能推送一次哦

    在批处理命令中实现自动打包并推送到nuget服务器

    @echo off
    ::项目名称和程序集名称(经常是同样的名字,但是也可能不一样,看你自己项目设置)
    set ProjectName={替换成你项目名字}
    set AssemblyName={替换成你打包程序及名字}
    ::Nuget发布的账号密码,中间用英文冒号隔开(account:password)
    set ApiKey= {替换成你的ApiKey}
    ::发布模式 Release/Debug
    set PublishMode=Release
    ::Nuget发布地址
    set SourceUrl=nuget.org
    
    ::这里开始禁止修改
    del %AssemblyName%.*.nupkg /F /Q
    nuget pack %ProjectName%.csproj -Build -Prop Configuration=%PublishMode%
    nuget push %AssemblyName%.*.nupkg -Source %SourceUrl% -ApiKey %ApiKey%
    del %AssemblyName%.*.nupkg /F /Q

    在Gitlab的CI脚本中实现自动打包并推送到nuget服务器

    在yml脚本开头先定义这些变量

    variables:  
      DeployPrjName: {你的项目名字}
      DeployAssemblyName: {你要打包的程序及名字}
      ApiKey: {你的ApiKey}
      PublishMode: Release
      SourceUrl: nuger.orgt

    在yml脚本deploy stage中加上这样一个job就能实现在mster分支推送过去后自动打包并推送道你的nuget服务器发布了

    deployJob:
      stage: deploy
      tags:
      - Windows
      - VisualStudio
      only:
      - master
      script:
      - echo "starting deploy"
      - cd "%DeployPrjName%"
      - del %DeployAssemblyName%.*.nupkg
      - C:\tools\nuget.exe pack %DeployPrjName%.csproj -Build -Prop Configuration=%PublishMode%
      - C:\tools\nuget.exe push %DeployAssemblyName%.*.nupkg -Source %SourceUrl% -ApiKey %ApiKey%
      - rmdir /s  /q bin
      - rmdir /s  /q obj 
      - del %DeployAssemblyName%.*.nupkg /F /Q 
      dependencies:
      - buildJob

    C#程序设置版本自动更新

    项目>属性>应用程序>程序集信息(I)中将版本号最后一位或最后两位修改成*即可,如下图所示

    image

    应为只有版本号更新了nuget才能推送成功,所以这个步骤非常必要

    获取NuGet包

    在C#项目 引用 上右键选择 管理NuGet程序包 跳出如下界面,在界面上选择一下程序包源就可以搜索浏览对应源位置的nuget包了,如下图所示。(我的包是推送到公司服务器,大多数时候大家推送到nuget.org,所以程序包源默认都是选择nuget.org)

    image

    怎样设置添加自己公司的程序包源或者是本地磁盘上的离线*.nupkg文件呢?

    在程序包源右边的设置按钮弹出如下窗口,在这里设置Nuget包源位置并点击更新就行了。

    image

    Nuget包的三种不同来源

    1.nuget.org

    这是默认就有的

    2.你公司自建服务器

    将包源位置设置你你公司服务器url即可,如上图中程序包源MyCompany项设置

    3.本地硬盘离线包文件

    在上图中包源位置设置时,点击黄色高亮的“…”按钮,浏览找到你的nuget包(*.nupkg)所在目录,将包源位置设置为该目录即可

     

    在没有网络的情况下用户怎样还原依赖的Nuget包

    在没有网络的情况下Visual studio无法连接到Nuget包数据源服务器,会导致无法恢复Nuget包产生找不到引用项的问题。该问题可以在其他有网络的计算机上获取Nuget包,拷贝过来放在你计算机上某个位置,在包源列表中添加一项,把包源位置设置为该目录即可。Visual Studio在恢复nuget包的时候再尝试遍历你的包源列表,直到获取到该包为止。

    获取Nuget包文件

    方法一:

    在已经安装了该包的solution下找到packages文件夹,Nuget包文件就在这里,直接拷贝即可

    方法二:

    在有网络的地方,打开cmd命令行输入以下命令下载包文件

          nuget install SeeSharpTools.JXI.Debug -Source {Source url} -DirectDownload

    参考

    Microsoft Note:创建 NuGet 包

    Microsoft Note:快速入门:使用 Visual Studio 创建和发布 NuGet 包(仅限 .NET Standard 和 Windows)

    Microsoft Note:.nuspec 引用

    Microsoft Note:NuGet CLI 参考

    https://docs.microsoft.com/zh-cn/nuget/tools/nuget-exe-cli-reference

    https://blog.csdn.net/huwei2003/article/details/53116851

    https://msdn.microsoft.com/zh-cn/magazine/hh547106.aspx

    https://www.cnblogs.com/xcsn/p/6258005.html

    NuGet 使用问题 Source parameter was not specified.

    使用NUget发布自己的dll(转)

    发布自己的类库到NuGet

    Vs自定nuget push菜单

  • 相关阅读:
    MQ消息堆积处理
    mysql覆盖索引与回表
    MYSQL-间隙锁详解
    MySQL InnoDB(Spring)并发事务导致的死锁及解决方案
    new String()创建了几个对象
    公平锁和非公平锁
    一个java对象最小占用内存空间
    千万级甚至亿级数据量排序
    @media (prefers-reduced-motion)
    babel 编译后导致_typeof无限递归调用 Maximum call stack size exceeded
  • 原文地址:https://www.cnblogs.com/lyh523329053/p/10145116.html
Copyright © 2011-2022 走看看