原文:示例:在Nuget发布自己的包的步骤

一、目的:很多时候都在用第三方的Nuget包,现成的轮子可以减少很多工作量,同时我们也可以造轮子供自己和其他人使用,本示例主要演示如何发布dll到Nuget上

二、环境:

Win10、VS2019、nuget.exe、nuget.org 帐户

三、步骤:

1、创建nuget.org 帐户

注册地址 https://www.nuget.org/

2、下载nuget.exe

下载地址:https://dist.nuget.org/win-x86-commandline/latest/nuget.exe

将nuget.exe 设置系统环境变量,方便使用命令,也可以不设置,不设置则要使用全路径

3、创建一个程序集

设置程序集描述信息,这些会生成在nuget包中


  1. // 有关程序集的一般信息由以下
  2. // 控制。更改这些特性值可修改
  3. // 与程序集关联的信息。
  4. [assembly: AssemblyTitle("我的标题")]
  5. [assembly: AssemblyDescription("我的说明")]
  6. [assembly: AssemblyConfiguration("")]
  7. [assembly: AssemblyCompany("我的公司")]
  8. [assembly: AssemblyProduct("我的产品")]
  9. [assembly: AssemblyCopyright("Copyright © 2019")]
  10. [assembly: AssemblyTrademark("")]
  11. [assembly: AssemblyCulture("")]
  12. // 将 ComVisible 设置为 false 会使此程序集中的类型
  13. //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
  14. //请将此类型的 ComVisible 特性设置为 true。
  15. [assembly: ComVisible(false)]
  16. // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
  17. [assembly: Guid("70dabedf-1206-4a25-a55a-d54ec5ec14a5")]
  18. // 程序集的版本信息由下列四个值组成:
  19. //
  20. // 主版本
  21. // 次版本
  22. // 生成号
  23. // 修订号
  24. //
  25. //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
  26. //通过使用 "*",如下所示:
  27. // [assembly: AssemblyVersion("1.0.*")]
  28. [assembly: AssemblyVersion("1.0.0.0")]
  29. [assembly: AssemblyFileVersion("1.0.0.0")]

确保修改后重新生成程序集

4、生成nuget清单文件(.nuspec )

主要通过三个命令:nuget spec、nuget packnuget push

在解决方案.csject目录下执行cmd命令 nuget spec

示例:

C:\Users\Hebiangu\source\repos\hebiangu.nugettest\hebiangu.nugettest>nuget spec

已成功创建“hebiangu.nugettest.nuspec”。

此时,在同级目录下生成了一个清单文件,内容如下:


  1. <?xml version="1.0"?>
  2. <package >
  3. <metadata>
  4. <id>$id$</id>
  5. <version>$version$</version>
  6. <title>$title$</title>
  7. <authors>$author$</authors>
  8. <owners>$author$</owners>
  9. <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
  10. <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
  11. <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
  12. <requireLicenseAcceptance>false</requireLicenseAcceptance>
  13. <description>$description$</description>
  14. <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
  15. <copyright>Copyright 2019</copyright>
  16. <tags>Tag1 Tag2</tags>
  17. </metadata>
  18. </package>

5、执行打包命令,生成.nupkg文件

在解决方案.csject目录下执行cmd命令 nuget pack

示例:

C:\Users\HeBianGu\source\repos\hebiangu.nugettest\hebiangu.nugettest>nuget pack

正在尝试从“hebiangu.nugettest.csproj”生成程序包。

MSBuild auto-detection: using msbuild version '16.0.462.64354' from 'D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\bin'.

正在打包“C:\Users\HeBianGu\source\repos\hebiangu.nugettest\hebiangu.nugettest\bin\Debug”中的文件。

正在对元数据使用“hebiangu.nugettest.nuspec”。

Successfully created package 'C:\Users\HeBianGu\source\repos\hebiangu.nugettest\hebiangu.nugettest\hebiangu.nugettest.1.0.0.nupkg'.

此时在同级目录下会生成一个.nupkg文件,此时打包任务已经完成

6、上传发布Nuget包

首先、获取密钥:登录nuget.org 帐户,在右上角下拉菜单中找到API Key,点击Create创建一个密钥,输入Key Name,输入Glob Pattern 为 *,点击创建,完后点击Copy复制密钥 如: oy2lfjcetwxsiutysnje9867c5s83hnf6aj5q,注意需要自己保存密钥

其次、上传包

在同级目录执行如下命令即可

nuget push hebiangu.nugettest.1.0.0.nupkg oy2lfjcetwxsiutysnje9867c5s83hnf6aj5q -Source https://api.nuget.org/v3/index.json

hebiangu.nugettest.1.0.0.nupkg :是打包最终生成的.nupkg文件

oy2lfjcetwxsiutysnje9867c5s83hnf6aj5q:是产品密钥,产品密钥需要在注册nuget.org 帐户

示例:

C:\Users\HeBianGu\source\repos\hebiangu.nugettest\hebiangu.nugettest>nuget push hebiangu.nugettest.1.0.0.nupkg oy2lfjcetwxsiutysnje9867c5s83hnf6aj5q -Source https://api.nuget.org/v3/index.json

Pushing hebiangu.nugettest.1.0.0.nupkg to 'https://www.nuget.org/api/v2/package'...

  PUT https://www.nuget.org/api/v2/package/

警告: <licenseUrl> element will be deprecated,please consider switching to specifying the license in the package. Learn more: https://aka.ms/deprecateLicenseUrl.

  Created https://www.nuget.org/api/v2/package/ 1831ms

Your package was pushed.

以上就是发布的全部过程

注意:

1、创建的 hebiangu.nugettest.1.0.0 名称不能和服务器上已有的包名重复,否则会报403错误,检查方式是到nuget上搜索一下有没有该名称的包

2、上传的包会通过审查,需要等一段时间大概一个小时以内才能搜索到

3、创建一个批处理文件一键发布

创建文件:nuget-push.bat

文件内容如下,将批处理文件放到程序集目录下执行即可一键发布:

cd  %~dp0

nuget spec

nuget pack

nuget push  hebiangu.nugettest.1.0.0.nupkg oy2leteteymeerertetedc3aufgfool4is6aj5q -Source https://api.nuget.org/v3/index.json

pause

此时在nuget.org和VS中可以搜索并应用自己的包了

示例:在Nuget发布自己的包的步骤的更多相关文章

  1. 工具 在 Nuget 发布自己的包

    MSDN : https://docs.microsoft.com/zh-cn/nuget/quickstart/create-and-publish-a-package-using-visual-s ...

  2. 使用NuGet发布自己的类库包(Library Package)

    STEP 1:注册并获取API Key 首先,你需要到NuGet上注册一个新的账号,然后在My Account页面,获取一个API Key,这个过程很简单,我就不作说明了. STEP 2:下载NuGe ...

  3. [Visual Studio] NuGet发布自定义包(Library Package)

    源文章:dax.net http://www.cnblogs.com/daxnet/archive/2013/05/07/3064577.html 使用NuGet发布自己的类库包(Library Pa ...

  4. 使用NuGet发布自己的.NET NuGet 包( .NET Standard & Windows)

    发布自己的nuget包 STEP 1:获取API Key 首先,你需要到NuGet上注册一个新的账号,然后在My Account页面,获取一个API Key,或者是自建服务器上生成一个API Key( ...

  5. 使用Nuget发布自己的类库包

    NuGet是一个为大家所熟知的Visual Studio扩展,通过这个扩展,开发人员可以非常方便地在Visual Studio中安装或更新项目中所需要的第三方组件,同时也可以通过NuGet来安装一些V ...

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

    一:Nuget控制台有几个常用命令 Get-Package 获取当前项目已经安装的类库 Install-Package 安装指定类库,命令格式如下:Install-Package 类库ID,示例:PM ...

  7. 使用NUget发布自己的dll

    一:Nuget控制台有几个常用命令 Get-Package 获取当前项目已经安装的类库 Install-Package 安装指定类库,命令格式如下:Install-Package 类库ID,示例:PM ...

  8. NuGet 发布

    其实吧,我并没有用到nuget发布,但是在做项目的过程中,我需要别的系统给我接口,所有吧,人家就发 布了了一个nuget程序集,而我呢,就引用了一下,然后就可以用了,又不吧,本人小编好奇心比较重,所以 ...

  9. 手把手教你发布一个Python包

    本文主题如下: 编写一个包(Python 源代码),但不是本文的重点. 编译包,观察编译后的文件. 发布包,发布的包可以有多种类型. 如何在 Pypi 中查看已发布的包 注意: 本文编写的包在 Pyt ...

随机推荐

  1. Nginx 高级配置-实现多域名HTTPS

    Nginx 高级配置-实现多域名HTTPS 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx支持基于单个IP实现多域名的功能 Nginx支持基于单个IP实现多域名的功能 ...

  2. 仿照addCleanup 在unittest中清理addSetupclass资源

    addCleanup的用例这里不介绍了,可以看我的另一编文章: python unittest框架中addCleanup函数详解 但如果有下面这种场景,还是会遗留大批理资源 在setUpClass注入 ...

  3. Scrapy笔记12- 抓取动态网站

    Scrapy笔记12- 抓取动态网站 前面我们介绍的都是去抓取静态的网站页面,也就是说我们打开某个链接,它的内容全部呈现出来. 但是如今的互联网大部分的web页面都是动态的,经常逛的网站例如京东.淘宝 ...

  4. q1095

    一,写题 1,我这个递归的错误我挺想搞出来的 int fa(int x) { ) return cnt; ==) { x=x/; cout<<"测试1:"<< ...

  5. Json、Pickle

    目录 Json pickle Json JSON是一个序列化模块,一种用于存储和交换数据的语法. JSON是用JavaScript对象表示法(JavaScript object notation)格式 ...

  6. Windows空间清理2

    最近听说有同事因为电脑C盘不足,让别人重装电脑解决了,感觉有点意料之外又有点情理之中. 一方面居然有某些做技术的同事不知道要如何高效的清理自己的磁盘空间,要花一天时间重装系统.然后装软件.再配置各种开 ...

  7. 【转】SkipList跳表基本原理

    增加了向前指针的链表叫作跳表.跳表全称叫做跳跃表,简称跳表.跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表.跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找.跳表不仅 ...

  8. MYSQL:基于哈希的索引和基于树的索引有什么区别?

    B+树是一个平衡的多叉树.B+树从根节点到叶子节点的搜索效率基本相当,不会出现大幅波动. 哈希索引采用一定的哈希算法,把键值换成新的哈希值,检索时不需要类似B+树那样从根节点逐级查找,只需一次哈希算法 ...

  9. 洛谷p1776宝物筛选

    宝物筛选 多重背包问题 物品数目已知 可以枚举每个物品 当做01背包来做 不过会超时 此时需要二进制拆分来优化 分解成新的物品 再跑一遍01背包即可 //二进制拆分+01背包 //设f[j]表示前i件 ...

  10. Chrome崩溃的解决办法

    前两天Win10 更新的安全组件,第二天上班来就打开不了Chrome了,打开就是:噢哟,崩溃了! 那是连 setting 页都打不开的啊...好晕,好晕. 我是真的有点崩溃啊,在网上找了好久,什么与百 ...