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

news2024/12/24 21:13:17

一、前言

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1161975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

引领制造业高质量发展,龙讯旷腾特邀出席2023工业软件生态大会

2023工业软件生态大会 为集中展示“新一代工业软件体系”、“新型产业数字化转型范式”&#xff0c;广东省工业和信息化厅、广东省科学技术厅、广东省教育厅及深圳市人民政府拟于2023年11月5日至6日在深圳市举办2023工业软件生态大会&#xff0c;由广东省数字化学会、电子五所…

关于栈内存的一些总结

我们日常使用的电脑内存一般是小端序&#xff0c;也就是从低地址到高地址。 一般来说栈向下增长。 但是这个方向不是确定的&#xff1a; 在小端序操作系统中&#xff0c;栈和堆的增长方向通常是与特定架构和操作系统相关的&#xff0c;因此不是唯一确定的。 小端序指的是将…

CV计算机视觉每日开源代码Paper with code速览-2023.10.31

精华置顶 墙裂推荐&#xff01;小白如何1个月系统学习CV核心知识&#xff1a;链接 点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构】&#xff08;NeurIPS2023&#xff09;Fa…

【源码分析系列】antdv table滚动时固定表头

背景 当页面滚动的时候&#xff0c;如果超过表格的部分&#xff0c;表格的头部会固定在某个位置&#xff0c;方便用户看到数据栏的标。项目采用的是vue2antdv&#xff0c;但是这个版本的table没有sticky属性&#xff0c;所以需要自行解决。 滚动前&#xff1a; 滚动后&#x…

WoShop多语言外贸跨境商城源码(支持直接铺货,多语言,多货币切换)

多语言外贸跨境商城源码是一种用于构建多语言跨境电子商务平台的软件解决方案。这种源码通常支持多种语言&#xff0c;以便让商家能够轻松地将他们的产品和服务销售到全球各地。 以下是多语言外贸跨境商城源码的一些主要特点&#xff1a; 1. 多语言支持&#xff1a;源码通常支持…

类百度知识付费网站

需购买&#xff1a;部署联系&#xff0c;支持压缩包&#xff0c;doc&#xff0c;pdf预览等

什么?前端又出新轮子了?ofa.js

不需要打包的 MVVM JavaScript 框架 无需繁琐学习&#xff0c;无需 npm、nodejs、webpack&#xff0c;即刻上手 <script src"https://cdn.jsdelivr.net/gh/kirakiray/ofa.js/dist/ofa.min.js"></script>官方文档 取代 jQuery 在许多小型项目中&#x…

研发效能DevOps: Git安装

目录 一、理论 1.Git 2.Git 工具 二、实验 1.Git安装 2.配置Git 3. VS Code加载Git 一、理论 1.Git &#xff08;1&#xff09;简介 Git 是一个分布式版本控制及源代码管理工具;Git 可以为你的项目保存若干快照&#xff0c;以此来对整个项目进行版本管理。 Git 是一个…

clusterprolifer go kegg msigdbr 富集分析应该使用哪个数据集,GO?KEGG?Hallmark?

关注微信&#xff1a;生信小博士 5 Overview of enrichment analysis Chapter 5 Overview of enrichment analysis | Biomedical Knowledge Mining using GOSemSim and clusterProfiler 5.1.2 Gene Ontology (GO) Gene Ontology defines concepts/classes used to describ…

毕业生求职,需要做哪些准备工作?

第一、了解企业招聘需求&#xff0c;不同岗位除了对应的专业知识以为&#xff0c;还需要了解岗位的特点&#xff0c;比如&#xff1a;销售类型的工作&#xff0c;口才要好&#xff0c;逻辑要强。如果你懂技术&#xff0c;但是羞于表达&#xff0c;都是无法胜任的。结合自身性格…

ztree调整节点间距及一般使用

1.基本介绍 树形结构菜单的功能属于非常常见的一种菜单交互&#xff0c;本人先后也使用过多种树形结构的插件&#xff0c;有 ztree、xloadtree、treeview、datagrid-tree 等等等等。近期有个功能恰好又要使用tree菜单了&#xff0c;由于可自行选择使用的组件&#xff0c;所以略…

简单工厂模式、工厂方法模式、抽象工厂模式

简介 将实例化代码提取出来&#xff0c;放到一个类中统一管理和维护&#xff0c;达到和主项目依赖关系的解耦&#xff0c;从而提高项目的扩展性和维护性。 工厂模式将复杂的对象创建工作隐藏起来&#xff0c;而仅仅暴露出一个接口供客户使用&#xff0c;具体的创建工作由工厂管…

Axie Infinity 超级任务远超预期,和 YGG 一起探索 Web3 增长新方式!

参与超级任务的实际人数是预期人数的两倍。 超级任务将新玩家引入 Web3 游戏领域&#xff0c;并向他们介绍可以为其玩家旅程提供支持的社区。 Axie Infinity 超级任务旨在向新手和 Axie Classic 老 玩家介绍「Axie Infinity&#xff5c;起源」这款游戏。 整个活动共吸引了 4,…

Luminar Neo Mac/Windows中文版:引领AI图像编辑的革命性时代

Luminar Neo运用先进的AI技术&#xff0c;能够自动化地完成许多繁琐的编辑任务&#xff0c;如色彩校正、噪点消除、人脸识别等。这不仅大大提高了工作效率&#xff0c;同时也降低了对专业知识和技能的要求。无论你是专业摄影师&#xff0c;还是摄影爱好者&#xff0c;甚至是一个…

python写爱心代码【爱心代码编程python可复制粘贴】

python写爱心代码【爱心代码编程python可复制粘贴】 python程序代码&#xff1a;heart.py from math import cos, pi import numpy as np import cv2 import os, glob class HeartSignal: def __init__(self, curve"heart", title"Love U", frame_n…

程序员用接单平台靠谱吗?浅谈一下十年程序员的看法

后疫情时代&#xff0c;经济下行&#xff0c;这年头社会上就业也越来越卷了&#xff0c;程序员人才市场也日趋饱和。不少人嗅到危险气息&#xff0c;已经开始谋求出路了! 咱们程序员的话&#xff0c;“兼职”"接单"也不是个新鲜的话题了。养家糊口也好、财富自由也罢…

优优嗨聚集团:医保新政来袭,乙类OTC、保健品或将退出医保舞台,影响几何?

近日&#xff0c;国家医保局发布征求意见稿&#xff0c;拟将乙类OTC&#xff08;非处方药&#xff09;和保健品从医保目录中移除。这一政策一旦实施&#xff0c;无疑将对广大参保人员和相关企业产生深远影响。本文将为您详细解析这一政策可能带来的影响&#xff0c;以及如何应对…

19.3 Boost Asio 多线程通信

多线程服务依赖于两个通用函数&#xff0c;首先boost::bind提供了一个高效的、简单的方法来创建函数对象和函数对象适配器&#xff0c;它的主要功能是提供了一种将函数和它的参数绑定到一起的方法&#xff0c;这种方法可以将具有参数的成员函数、普通函数以及函数对象转化为不带…

日常笔记工具搭档(Typora、Snipaste)

一、Typora 啥也不说了直接上图 Markdown语法 Typora免费版 提取码&#xff1a;av01 二维码&#xff1a; 1&#xff09;页面展示 2&#xff09;主题 3&#xff09;偏好设置 4&#xff09;Markdown语法设置偏好 5&#xff09;编辑器 6&#xff09;系统 二、Snipaste Snipaste…

中国电子云-隐私计算-云原生安全可信计算,物理-硬件-系统-云产品-云平台,数据安全防护

目录 联邦学习的架构思想 中国电子云-隐私计算-云原生安全 可信计算&#xff0c;物理-硬件-系统-云产品-云平台&#xff0c;数据安全防护 全栈国产信创的意义 1. 提升科技创新能力 2. 推动经济发展 3. 加强信息安全与自主可控 全栈国产信创的重要领域 1. 人工智能 2.…