从0到1部署私域NuGet库:实战指南,让你轻松掌握!

引言

  • 私域NuGet包的重要性:代码复用和团队协同。通过将公共组件、库或工具打包成NuGet包,并在私域中共享,团队成员可以更方便地引用和使用这些资源。其次私域NuGet包有助于依赖管理。通过私域NuGet包,团队可以集中管理这些依赖,确保项目引用的版本一致,并减少因依赖冲突或版本不兼容导致的问题。
  • 一键打包上传:通过简单的命令或脚本,自动完成代码打包、版本控制以及上传到私域NuGet服务器的过程。

BaGet私仓搭建

  • BaGet: 是GitHub上开源的一个项目,是一个轻量级NuGet和符号服务器,是NuGet V3 服务器的开源实现。
  • 系统环境: Windows11 + IIS10
    环境

下载BaGet和部署

  • Github地址:https://github.com/loic-sharma/BaGet
    github

下载BaGet

下载Relese包地址`:https://github.com/loic-sharma/BaGet/releases(选择最新的版本)
下载

解压创建IIS站点绑定BaGet

  • 记得要安装ASP.NET Core 托管捆绑包
    IIS站点

预览

打包及推送

编译/发布环境构建

.Net Framework

打包和推送使用Nuget Cli 命令完成
  1. 下载nuget.exe 文件,并设置环境变量
  • 下载地址:https://learn.microsoft.com/zh-cn/nuget/install-nuget-client-tools?tabs=windows#nugetexe-cli 下载完成后放到指定目录
    下载
  • 然后添加nuget系统环境变量
    nuget环境变量

MSbuild 工具编译发布代码

  • 这里我使用最新的VS2022(同时支持.NET Framework和.NET Core)安装好的MSbuild 工具来进行代码编译和发布,单独安装MSbuild 工具下载地址:https://aka.ms/vs/17/release/vs_BuildTools.exe

  • 添加MSbuild 工具 到环境变量,VS2022 路径:C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin

MSbuild 环境变量

测试实践

  • 利用VS2022创建一个.Net Framework 4.7.2 项目,然后再增加一个类库,解决方案目录如下
    目录

编写脚本保存为.bat文件

@echo off
REM 开启变量延迟环境
setlocal enabledelayedexpansionREM 定义全局变量  
REM 当前项目路径
set "buildFolder=%cd%"  
set "rootFolder=%buildFolder%\"  
REM 推送key 和Nuget 地址 ,这里都可以定义成变量
set "apiKey=%1" 
set "sourceUrl=http://localhost:8081/v3/index.json"  REM 打印项目路径和项目根路径
echo buildFolder: %buildFolder%
echo rootFolder:  %rootFolder%
echo apiKey:  %apiKey%REM 编译解决方案,如编译不通过则不进行打包
set "solutionPath=.\WebTestApi.sln"  
@pause
echo msbuild build -- start
REM 还原引用包 
nuget restore
msbuild -m %solutionPath%  /t:Rebuild /p:Configuration=Release /p:DeployOnBuild=true
echo msbuild build -- end  
if %errorlevel% neq 0 (  echo Build sln Error!  exit /b 1  
)  REM 打包之前先删除nuget包  
set "nuGetOutputFolder=%buildFolder%\nuGetPackages"  
echo NuGetOutputFolder: %nuGetOutputFolder%  REM 判断
if exist "%nuGetOutputFolder%*" (  rmdir /s /q "%nuGetOutputFolder%"  mkdir "%nuGetOutputFolder%"  
)  REM 指定项目打包,这里可以写成变量  
set "projects=ClassTestLibrary  WebTestApi"    echo nuget  pack -- start  
for %%p in (%projects%) do (  echo item:%%pset "projectFolder=%rootFolder%\%%p"  echo projectFolder: !projectFolder!  nuget pack "!projectFolder!"  -SolutionDirectory %rootFolder% -OutputDirectory  !nuGetOutputFolder!  
)  
echo nuget  pack -- end REM 推送NuGet包  
set "nupkgs=!nuGetOutputFolder!\*.nupkg"  
echo  nuget push -- start  if "!apiKey!"=="" (  REM 批量推送 两者都可以REM nuget push -Source %sourceUrl% "!nupkgs!" REM 循环推送for %%f in (%nupkgs%) do (  nuget push "%%f" -Source %sourceUrl% ))else (REM nuget push -Source %sourceUrl% "!nupkgs!" -ApiKey %apiKey% 
REM 循环推送  for %%f in (%nupkgs%) do (  nuget push "%%f" -Source %sourceUrl% -ApiKey %apiKey%  ) 
) 
cho  nuget push -- end  @pause

上述脚本执行效果如下图:

推送成功
成功

.NetCore

  • 打包和推送使用 .NET Cli 命令完成

编写脚本并保存为.bat文件

@echo off  
REM 开启变量延迟环境
setlocal enabledelayedexpansion  REM 定义全局变量   
REM 当前项目路径 
set "buildFolder=%cd%"  
set "rootFolder=%buildFolder%\"  
echo rootFolder
set "apiKey=%1"  
set "sourceUrl=http://localhost:8081/v3/index.json"  echo buildFolder: %buildFolder%  
echo rootFolder: %rootFolder%  set "nuGetOutputFolder=%buildFolder%\packages"  
echo NuGetOutputFolder: %nuGetOutputFolder%  REM 编译解决方案  
set "solutionPath=.\Reborn.Starter.sln"  
@pause
echo dotnet build -- start  
dotnet build "%solutionPath%" -c Release  
echo dotnet build -- end  
@pause  
if %errorlevel% neq 0 (  echo Build Error!  exit /b 1  
)  REM 打包之前先删除nuget包  
if exist "%nuGetOutputFolder%*" (  rmdir /s /q "%nuGetOutputFolder%"  mkdir "%nuGetOutputFolder%"  
)  REM 指定项目打包  
set "projects=Reborn.Api Reborn.Core"    echo dotnet pack -- start  
for %%p in (%projects%) do (  echo item:%%pset "projectFolder=%rootFolder%\%%p"  echo projectFolder: !projectFolder!  dotnet pack "!projectFolder!" --no-build -c Release /p:SourceLinkCreate=true /p:SolutionDir=%rootFolder% -o !nuGetOutputFolder!  
)  
echo dotnet pack -- end  REM 推送NuGet包  
set "nupkgs=%nuGetOutputFolder%\*.nupkg"   
echo dotnet nuget push -- start   if "!apiKey!"=="" (  REM 批量推送 两者都可以REM dotnet nuget push "!nupkgs!" -s %sourceUrl%--skip-duplicate REM 循环推送for %%f in (%nupkgs%) do (  dotnet nuget push "%%f" -s %sourceUrl% --skip-duplicate ))else (REM dotnet nuget push "!nupkgs!" -s %sourceUrl% -k %apiKey% --skip-duplicate 
REM 循环推送  for %%f in (%nupkgs%) do (   dotnet nuget push "%%f" -s %sourceUrl% -k %apiKey% --skip-duplicate ) 
) 
echo dotnet nuget push -- end  @pause

上述脚本执行效果如下:
执行
成功

最后安装私有Nuget 包

  • 在VS2022中添加私有包源地址
    私有包源地址

  • 在nuget 包管理器中搜索发布的私有包并安装
    安装

  • 引用私有管理器包中的方法
    成功

参考

  • [链接] https://loic-sharma.github.io/BaGet/
  • [链接] https://learn.microsoft.com/en-us/nuget/reference/cli-reference/cli-ref-push
  • [链接] https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-nuget-push

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

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

相关文章

案例研究|DataEase实现物业数据可视化管理与决策支持

河北隆泰物业服务有限责任公司(以下简称为“隆泰物业”)创建于2002年,总部设在河北省高碑店市,具有国家一级物业管理企业资质,通过了质量体系、环境管理体系、职业健康安全管理体系等认证。自2016年至今,隆…

启信宝商业大数据助力全国经济普查

近日,合合信息旗下启信宝收到中国青年创业就业基金会感谢信,对启信宝协同助力全国经济普查和服务青年创业就业研究表达感谢。 第五次全国经济普查是新时代新征程上一次重大国情国力调查,是对国民经济“全面体检”和“集中盘点”,…

virtualbox 设置虚拟机 centos 网络

在VirtualBox中为运行CentOS系统的虚拟机配置网络连接,您通常可以选择以下几种网络模式之一,以满足不同的网络需求: NAT (Network Address Translation): 功能:允许虚拟机通过宿主机的网络连接访问互联网,同时也可以从…

学习鸿蒙基础(10)

目录 一、轮播组件 Swiper 二、列表-List 1、简单的List 2、嵌套的List 三、Tabs容器组件 1、系统自带tabs案例 2、自定义导航栏: 一、轮播组件 Swiper Entry Component struct PageSwiper {State message: string Hello Worldprivate SwCon: SwiperControl…

Ribbon简介

目录 一 、概念介绍 1、Ribbon是什么 2、认识负载均衡 2.1 服务器端的负载均衡 2.2 客户端的负载均衡 3、Ribbon工作原理 4、Ribbon的主要组件 IClientConfig ServerList ServerListFilter IRule Iping ILoadBalancer ServerListUpdater 5、Ribbon支持…

BGP实训

BGP基础配置实训 实验拓扑 注:如无特别说明,描述中的 R1 或 SW1 对应拓扑中设备名称末尾数字为 1 的设备,R2 或 SW2 对应拓扑中设备名称末尾数字为2的设备,以此类推;另外,同一网段中,IP 地址的主…

vs右键在浏览器中查看报错

vs右键在浏览器中查看报错Visual studio 右键在浏览器中查看报错HTTP错误500.30——ANCM进程内启动失败——.NET Core HTTP Error 500.30 - ANCM In-Process Start Failure - .NET Core HTTP Error 500.30 - ANCM In-Process Start Failure Common solutions to this issue: …

海量电动汽车数据无法解决?不放试试基于MonteCarlo方法的大规模电动汽车充放电模型程序代码!

前言 电动汽车大规模入网充电时会导致系统内负载峰值拔高的问题,和分布式电源一样,都会对电网的安全稳定运行造成冲击,需要在满足系统运行经济效益最优的同时,尽量降低大量电动汽车入网无序充电对系统造成的不良影响。通过分析电…

【WEEK5】 【DAY4】数据库操作【中文版】

2024.3.28 Thursday 目录 2.数据库操作2.1.数据库2.1.1.新建数据库(右键的方法)2.1.2.查询:点击“查询”->“新建查询表”即可输入所需要的语句,点击“运行”,如: 2.2.结构化查询语句分类2.3.数据库操作…

帝国cms自适应html5古诗词历史名句书籍文章资讯网站源码整站模板sinfo插件带采集会员中心

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买!购买本专栏住如有什么源码需要,可向博主私信,第二天即可发布!博主有几万资源) 帝国cms自适应html5古诗词名句书籍文…

<TensorFlow学习使用P1>——《TensorFlow教程》

一、TensorFlow概述 前言: 本文中一些TensorFlow综合案例的代码逻辑一般正常,在本地均可运行。如有代码复现运行失败,原因如下: (1)运行环境配置可能有误。 (2)由于一些数据集存储空…

电脑ip地址如何改?这些修改方法请收好!

在数字化日益深入的今天,电脑作为我们日常工作和生活中的重要工具,其网络功能显得尤为关键。而在网络世界中,IP地址则是电脑连接互联网的身份证,它标识着电脑在网络中的位置与身份。然而,在某些特定情境下,…

头歌 实验一 关系数据库标准语言SQL湖北汽车工业学院 )

头歌 实验一 关系数据库标准语言SQL 制作不易!点个关注呗!为大家创造更多的价值! 目录 头歌 实验一 关系数据库标准语言SQL**制作不易!点个关注呗!为大家创造更多的价值!** 第一关:创建数据库第…

C语言: 指针讲解

为什么需要指针? (1)指针的使用使得不同区域的代码可以轻易的共享内存数据。当然你也可以通过数据的复制达到相同的效果,但是这样往往效率不太好,因为诸如结构体等大型数据,占用的字节数多,复制很消耗性能…

LTE 信道的分配

**部分笔记** 逻辑信道 数据在下行的经过RLC层处理后,会根据数据的类型进行不同的逻辑信道(数据类型的不听,用户的不同) 传输信道 在逻辑信道达到MAC层后,会被分配到 物理信道 逻辑信道 按照内容的属性以及UE的不…

【Java常用的API】JDK8相关时间类

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 …

第十三届蓝桥杯JavaA组省赛真题 - 裁纸刀

解题思路: 一道简单的数学题 先看例子,边缘必须裁四次,然后得到两行三列共六张二维码。 横线5裁一次,竖线6 7 8 9各裁一次,加上裁边缘的四次,共九次。 也就是说,横向裁剪次数为【行数 - 1】…

数独——拥有一定难度的回溯练习题,值得一看

数独相信大家都玩过,也都拥有不同的策略,那么放到C中又是怎样的呢?其实它就是回溯算法。话不多说,直接用例题来讲解: Description 数独是根据99盘面上的已知数字,推理出所有剩余空格的数字,并…

52 vue 中 image 资源直接使用 路径 和 使用require 的差异

前言 这也是 最近碰到的一个比较有趣的问题 是在 http 请求较多的场景下触发的情况 一般 我们的 Vue 中使用图片的地方, 一般会使用 require(“$imgPath”) 或者 “/$imgPath” 来配置图片的资源 然后 这个在目标页面 http 请求比较多的情况下, 两者 会有一些 差异, 我们…

Android中运动事件的处理

1.目录 目录 1.目录 2.前言 3.程序演示 4.第二种程序示例 5.扩展 2.前言 触摸屏(TouchScreen)和滚动球(TrackBall)是 Android 中除了键盘之外的主要输入设备。如果需要使用触摸屏和滚动球,主要可以通过使用运动事…