一、前言
作为软件研发从业人员,在学习和工作中经常会遇到一些频繁需要的接口或者方法,总不能每次都是重新反复去实现它,更多的是需要随着学习和工作时间的积累,慢慢积攒自己的 类库 或者程序 NuGet
包,这有助于我们技术的积累成长,以及在工作中提高工作效率。
话不多说,下面我结合以实际案例展示如何在本地创建自己的包源,如何去封装程序与 NuGet
包。
二、封装 NuGet
包
通常说到类库,我们会想到 DLL
文件,.Net
解决方案中项目都会在 bin
文件夹下生成一个与项目同名的 DLL
文件,其他项目可以添加引用程序集将这个 DLL
文件引入到项目,从而使用其中封装的方法。下面逐步骤讲解:
1、创建类库项目解决方案:
打开 Visual Studio
选择创建类库项目,如下截图所示。
填写项目名称及其他信息,这里测试填写项目名称为 MyDll
,而后点击 【下一步】 按钮,选择框架为 .NET Standard 2.0
,再点击 【创建】 按钮创建类库解决方案。如下图所示。
注意: 这里之所以选择创建框架为
.NET Standard 2.0
的类库,主要取决于平台的兼容性,封装的类库将会使用到.NET Core
、.NET Framework
等框架平台中,权衡于兼容性,采用.NET Standard 2.0
类库框架。
2、编写封装的方法代码:
在项目解决方案中创建类文件 StringHelp.cs
,意为字符串的处理帮助类,并在类里面实现一个方法 SubstringTail
,该方法实现了从获取字符串后面的 n 位。
提示: 工具类程序的封装,类尽可能采用静态类,方法也为静态的扩展方法,这有利于在使用过程中的方便,同样类命名空间也可以在对外访问中对程序类容的一个结构划分,这具体怎么去封装方法和规划命名空间,得要看需要和实际情况来,这里灵活理解即可。
3、类库打包成 NuGet
包:
打开 【程序包管理器控制台】 或者在资源管理器中类项目文件夹下打开 cmd
窗口,输入命令 dotnet pack
回车即可开始将当前项目打包生成一个 NuGet
包。详情如下所示:
PM> dotnet pack
用于 .NET 的 Microsoft (R) 生成引擎版本 17.1.0+ae57d105c
版权所有(C) Microsoft Corporation。保留所有权利。
正在确定要还原的项目…
所有项目均是最新的,无法还原。
MyDll -> F:\Net\MyDll\MyDll\bin\Debug\netstandard2.0\MyDll.dll
已成功创建包“F:\Net\MyDll\MyDll\bin\Debug\MyDll.1.0.0.nupkg”。
PM>
由命令行结果输出可以看到,已经将该项目打包生成 F:\Net\MyDll\MyDll\bin\Debug\MyDll.1.0.0.nupkg
包文件,在资源管理器中如下图所示:
提示: 如果需要在项目生成的时候就执行一次打包,即随时更新包,可以在 【项目属性】→【包】→【常规】 中勾选 【在构建时生成
NuGet
包】 ,如下图所示:
三、NuGet
包发布
经过上一节,已经封装并打包创建好了一个 NuGet
包,要想我们在 Visual Studio
访问获取该 NuGet
包,还得要将其发布一下。当然,你可以选择发布到 【nuget.org】 中,也可以发布到指定文件夹,或者自己创建一个包源服务器。
1、准备 NuGet.exe
程序:
要发布 NuGet
包,需要通过程序 NuGet.exe
来进行,可以访问网站 https://www.nuget.org 来下载,操作如下所示:
下载好后放置在某个文件夹下,并配置好环境变量(这里配置环境变量不做过多解释,请自行查阅资料)。
提示: 如果下载速度过慢,可以在文章后面的项目仓库里获取哦。
2、发布到本地文件夹:
【程序包管理器中】 执行命令 nuget add <NuGet 包文件名称> -source <包源目标文件夹>
发布选择的 NuGet
包到指定的文件夹内。如下所示:
PM> nuget add F:\Net\MyDll\MyDll\bin\Debug\MyDll.1.0.0.nupkg -source F:\MyPackages
Installed MyDll 1.0.0 from with content hash Trc0FI3SDr0/C6M0VbskE7VqfnlhwyNrPH3ivuV1Un+tFZlRNYeIMFahlzBM2eJocsUoHaeH9XIMmEnKv1Qzuw==.
Successfully added package 'F:\Net\MyDll\MyDll\bin\Debug\MyDll.1.0.0.nupkg' to feed 'F:\MyPackages'.
PM>
通过命令行可看到,已经将包发布到本地文件夹成功,效果如下图所示:
3、发布到私有包源服务器:
在发布包之前,需要创建一个包源服务器。在项目解决方案中创建一个 .NET Framework 4.6
框架的 Web
应用程序,如下图所示:
创建好后,在 Web
项目中引用 NuGet
包 NuGet.Server
,如下图所示:
在 Web.config
配置文件中修改 apiKey
配置项值,该值为当前 api
的键,当后期需要发布推送新的包或者包版本到该服务器时需要输入该 apiKey
配置值,这里设置的为 MyNuGetKey123
,可以随意设置。如下所示:
<appSettings>
<!--
Set the value here to allow people to push/delete packages from the server.
NOTE: This is a shared key (password) for all users.
-->
<add key="apiKey" value="MyNuGetKey123" />
</appSettings>
重新生成一下 Web
项目,并发布一下。
而后,在 IIS
或者其他中间件服务器上挂载该发布的 Web
服务应用程序。
服务器根目录中的文件结构:
在 【程序包管理器控制台】 中执行命令 nuget push <NuGet包文件名> <ApiKey> -source <推送的服务器地址/nuget>
可以将打包好的包推送到该服务器中,如下所示:
PM> nuget push F:\Net\MyDll\MyDll\bin\Debug\MyDll.1.0.0.nupkg MyNuGetKey123 -source http://192.168.124.4:8083/nuget
Pushing MyDll.1.0.0.nupkg to 'http://192.168.124.4:8083/nuget'...
警告: You are running the 'push' operation with an 'HTTP' source, 'http://192.168.124.4:8083/nuget/'. Non-HTTPS access will be removed in a future version. Consider migrating to an 'HTTPS' source.
PUT http://192.168.124.4:8083/nuget/
Created http://192.168.124.4:8083/nuget/ 91ms
Your package was pushed.
PM>
如此,我们的包就已经推送到了我们在 IIS
中挂载的 NuGet
包源服务器中了。可以打开服务器根目录中的 Packages
文件夹可以看到我们推送的包就已经在服务器里了。如下图所示
四、包源配置及使用
在 Visual Studio
中,打开 【工具】→【选项】→【NuGet 包管理器】→【程序包源】 点击【➕】新增一个包源,填写好包源信息,点击 【确定】 。如下图所示。
到这里,我们就能够成功的在项目里面引用我们配置好的包源服务器里面的 NuGet
包了。
注意: 在发布的
NuGet
包,从原则上来说不建议删除,因为这会导致引用了该包的程序无法继续拉取该包源,从而导致程序错误,所以,我们可以推送新的版本,但永远也别删除,除非你知道这个程序不需要这个包了,或者你已经将包同步到了其他的服务器中。
五、结语
勤于研究,善于总结,利于我们的成长进步。
如果您还有什么问题,可以留言或者添加(Q:1352559801)
项目源码地址:MyNuGetDemo