全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器

NuGut是用于VisualStudio提供的一种有效的管理类库引用的工具,为编程开发带来的好处自然不用多说。NuGet上有众多优秀的类库,能否将自己的编写的类库也上传到NuGet上或者拥有一个自己的NuGet服务器呢?答案是可以的,下面进入正文。


1.创建自定义NuGet包

1.1.创建类库

作为示例和前提,我们需要一个类库。创建一个类库MyClassLibrary,方法随便写一个。同时为了体现类库与类库之间的依赖关系,使用NuGet管理器添加NewtonSoft.Json类库的引用。打开项目属性文件Properties>AssemblyInfo.cs,并编辑项目信息。
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器
NuGet会根据项目Guid和版本号对类库进行管理,其他的信息也会体现在NuGet包中。
编译项目,可以在输出目录中看到MyClassLibrary.dll和NewtonSoft.Json.dll两个类库。
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器
有了类库就可以进行打包工作了,有多种方式可以实现类库打包。

1.2.使用命令行工具nuget.exe创建

下载命令行工具nuget.exe
拷贝nuget.exe至项目根目录,与.csproj工程文件同一级别。按Shift键右键选择“在此处打开命令窗口”。
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器
输入命令 :

nuget spec

创建打包配置文件MyClassLibrary.nuspec
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器
打开配置文件MyClassLibrary.nuspec修改相关选项并保存。
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器
nuspec文件实质是一个XML配置文件,带$号表示对应信息从项目自身读取。
输入命令:

nuget pack MyClassLibrary.csproj 或 nuget pack MyClassLibrary.nuspec

开始执行打包。如果出现错误或警告,根据提示修改AssemblyInfo.cs或.nuspec文件,保存后重新编译项目,再次执行打包命令。
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器
打包成功后会在项目根目录输出.nupkg文件。
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器

1.3.使用图形化工具NuGetPackageExplorer创建

对于很多一遇到命令行就抓瞎的同学,可以使用图形化工具NuGetPackageExplorer来进行打包。
下载NuGetPackageExplorer,解压后运行。选择“Create a new package”,创建一个新的nuget包。
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器
在左侧窗口点击编辑按钮修改程序包的版本号、描述等相关信息,相应的内容是和上面的.nuspec文件一致的。在右侧窗口点击“Add Existing File”添加已有文件,即项目输出目录中的类库文件MyClassLibrary.dll。
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器
另外由于在第一步创建类库的过程中添加了NewtonSoft.Json的引用,所以要在左侧点击"Edit dependencies"手动添加依赖。
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器
保存后得到.nupkg文件。

2.上传至NuGet官方服务器

2.1.申请NuGet账号并创建ApiKey

如果想要将上面创建的程序包上传到官方服务器并分享到公开用户,首先要注册一个NuGet账户,并创建一个属于自己的ApiKey。
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器

2.2.使用命令行工具上传

输入命令:

nuget push MyClassLibrary.nupkg MyApiKey -Source https://www.nuget.org/packages

其中MyApiKey替换成上一步创建的ApiKey。执行命令进行发布。

2.3.使用图形化工具上传

打开NuGetPackageExplorer,选择“File>Push”。
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器
选择Publish Url为“https://www.nuget.org”,并输入ApiKey,点击“Publish”进行发布。
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器

2.4.从NuGet官网发布

如果你已经注册了NuGet账号,登录后选择“Upload Packages”,同样可以上传程序包。
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器
上传成功后就可以在自己的文件列表中查看了,也可以在VisualStudio中打开NuGet管理器查看自己上传的类库了。

3.搭建私有NuGet服务器

有的时候在项目开发过程中会遇到这样一些问题,项目组或公司内部会有一些公用的包,但又不方便发布到公网上,能否搭建一个私有的NuGet服务器呢?好在NuGet支持这种需求。

3.1.创建并发布私有NuGet服务

新建一个空白的Web项目MyNuGetServer,打开NuGet管理器查询并安装NuGet.Server,注意不是NuGetServer这个李鬼。
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器
成功安装NuGet.Server后,项目会自动添加App_Start和Packages两个文件夹,其中App_Start文件夹中的NuGetODataConfig.cs为服务的配置选项,Packages为程序包的上传位置。
项目编译后发布到IIS,启动服务。
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器

3.2.发布程序包到私有服务器

将程序包发布到私有服务器和发布到官方服务器的步骤是一致的,只需要将发布地址改为私有服务的地址即可,ApiKey可在配置文件中修改。

3.3.配置VisualStudio

程序包发布到私有服务器后,修改VIsualStudio的相关配置就可以使用了。
在VS中选择“工具>NuGet包管理器>程序包管理器设置”,打开配置窗口,选择“程序包源”。添加一个程序包源,修改名称和源并更新保存。
全能程序员系列(七)--创建自定义NuGet包并搭建NuGet服务器
配置成功后就可以在NuGet管理器中搜索安装自己的私有程序包了。


有了趁手的兵器,才能攻坚克难!