Nuget简单来说是一个代码包管理工具,方便的控制代码的版本以及使用。
在VS创建的标准类库(现在类库分为两个版本一个是framework类库一个是标准类库),必须发布到Nuget,才能在新项目中使用。
提示:
1、下面说明使用命令行,又说使用VS xxxx 的开发人员命令提示符,又说使用powershell的,又说使用cmd,其实都可以,如果熟悉批处理文件可以写成批处理文件一键发布,我尝试过写成批处理文件,但是有两个问题,如何修改配置文件nuspec和生成nupkg上传nupkg时匹配文件名,使用*号匹配文件名有时会出现错误,如果你知道怎么写,还望告知
2、更新包时,注意在项目属性文件中修改版本以及重新生成
3、文章编写是难免有些错别字或其他错误,如果发现还望告知
今天,总结一下发布Nuget代码包的方法步骤。
第一步:创建一个类库项目
很简单,就不详细说了,创建个类库后,可以直接在class1中编写几个方法,或者新建类写几个方法,如果不想做测试,也可以直接拿你准备发布的类库项目直接操作。
第二步:注册Nuget账号
这个账号用来管理你的ApiKey和发布的项目。
第三步:获取ApiKey
登陆后,点击右上角你的用户名,下拉菜单中API Keys选项
打开新页面后,下方有两个非常大号的标题Create和Manage,现在Manage下是什么都没有的,你需要先点击Create创建一个APIKey
需要填写Key的一些信息如:
Key Name:密钥的名字,用来区分多个密钥
Expire In:密钥的有效期,可选1天,90天,180天,270天,365天
Select Scopes:选择作用范围
push:发布
Push new packages and package version:发布新的包和更新包的版本
Push only new package versions:只能更新包的版本
Unlish package:个人理解可能是取消包的索引,就是让某个包在Nuget管理器中搜索不到,只能通过恢复操作安装
Glob Pattern:我是直接输入的*,该选项的具体功能应该是匹配可以操作那些项目。
Available Packages:如果没有上传过包,这里是空的,上传过的包都会在这里显示,可以多选,功能应该是选择可以操作那些项目。
填写完成信息后,点击create完成创建。
回到API Keys页面下,Manage下面就会出现我们创建的Key
每一个key会显示一个大钥匙的图标,右边有四行文字
第一行是Key的名字
第二行是有效期和作用范围
第三行是可以管理那些包,我的都是Golb Pattern:*,因为我没具体选包做测试,直接输入了*
第四行是一些选项,第一个Copy:复制Key,这样我们就获取到了Key,注意这个选项过一段时间会消失,不能在次复制Key,如果Key丢失了了,那么找到第三个Regenerate点击重新生成Key这是,Copy选项就又会出现了,但是这次复制的Key和之前的那个Key不是同一个,之前的那个就失效了,第二个是Edit:可以编辑这个Key可以管理那些项目,也就是创建Key的最后两个选项,最后一个第四个是删除,删除这个Key。
第四步:下载Nuget.exe
打开Nuget.org,菜单栏找到Download,打开页面下载即可,地址:https://www.nuget.org/downloads
最左边是命令行客户端,中间提示说VS2017已经集成了,右边是VS2015和VS2013扩展包的下载
第五步:配置环境
这一步有两种做法,一种一劳永逸,一种每次都要复制一遍,根据个人习惯选择吧。
第一种:在C盘或者其他盘(建议C盘),创建一个目录,将Nuget.exe复制进去,然后将这个目录添加到环境变量,这个在对每个项目操作的时候都可以使用Nuget的命令
第二种:复制Nuget.exe到你要发布的项目的项目目录,csproj的目录不是sln,sln是解决方案目录,然后就可以在这个项目目录下使用Nuget的命令
第六步:设置密钥
在命令行下跳转到项目目录,运行如下指令,后面的xxxx代表哦的是密钥
nuget setApiKey xxxxxxx-xxxxxxx-xxxxxxx-xxxxxxx
第七步:配置文件设置
在项目目录下执行命令:
nuget spec
会生成一个后缀为nuspec的文件,里面配置了发布项目包的信息内容如下:
<?xml version="1.0"?>
<package >
<metadata>
<!-- 托管库中唯一标识符 -->
<id>$id$</id>
<!-- 解析依赖时使用的包版本号 -->
<version>$version$</version>
<title>$title$</title>
<!-- 作者 -->
<authors>admin</authors>
<!-- 所有者 -->
<owners>admin</owners>
<!-- 证书 -->
<licenseUrl>http://guomingxin.site/</licenseUrl>
<!-- 项目URL -->
<projectUrl>http://guomingxin.site/</projectUrl>
<!-- 该图标用于Visual Studio的包管理UI -->
<iconUrl>http://guomingxin.site/favicon.ico</iconUrl>
<!-- 如果是true,这个值提示用户在何时接受安装包许可证 -->
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<!-- 可以在包管理UI中使用描述。请注意,nuget.org画廊使用您在门户中添加的信息 -->
<description>Class Nuget Lib</description>
<!-- 关于这个特殊版本的任何细节 -->
<releaseNotes>
我的测试包
</releaseNotes>
<!-- 版权信息 -->
<copyright>Copyright 2017</copyright>
<!-- 标签出现在图库中,可以用于标记搜索 -->
<tags>Tag1 Tag2</tags>
<!-- 当安装包时,自动安装下列依赖项 -->
<dependencies>
<dependency id="Newtonsoft.Json" version="9.0" />
</dependencies>
</metadata>
</package>
这是我修改过的nuspec文件,没修改过的是一个默认说明
注意:
$xxx$这个内容如果项目属性文件中包含,会直接引用项目属性中的值,其他根据注释修改内容,不要保持默认,保持默认,执行时会有警告信息。
Id必须唯一;owners这个选项貌似没有用处,因为发布后的所有者都是你注册的账户名
第八步:运行命令生成发布包文件
在命令行下运行:
nuget pack xxxxx.csproj
会生成xxx.nupkg文件,这个就是我们需要上传的文件
第九步:上传
运行上传命令:
nuget push xxxx.nupkg -Source https://www.nuget.org/
网上的好多版本都是没有-Source https://www.nuget.org/,会报Source parameter was not specified.这个错误,加上源地址即可,个人服务器将url修改为个人服务器地址域名。
如果上传还是失败,到官网上手动上传,查看问题,是不是有重复的ID等问题。
官网菜单有Upload页面,打开后中间输入框选择你要上传的nupkg文件上传即可。
备注:
更新包版本的时候,省略前五步,直接从第六步开始操作即可
当然如果忘记密钥,那么还需要执行第三步获取,只不过是直接登陆网站重置密钥,然后拷贝即可
缺少nuget.exe文件如同第四步和第五步