NuGet 包私有源部署与创建 NuGet 包创建

提示: 这是一篇保姆级别操作教程,从 0 到 1 的完成 NuGet 包的创建与部署。如果您需要封装自己的包,部署自己的包源,那么这一篇文章就够了。

一、前言

  作为软件研发从业人员,在学习和工作中经常会遇到一些频繁需要的接口或者方法,总不能每次都是重新反复去实现它,更多的是需要随着学习和工作时间的积累,慢慢积攒自己的 类库 或者程序 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 项目中引用 NuGetNuGet.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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值