从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 enabledelayedexpansion

REM 定义全局变量  
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:%%p
    set "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%  
 ) 
) 
echo  nuget push -- end  
  
@pause

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

推送成功
成功

.NetCore

  • 打包和推送使用 .NET Cli 命令完成,可能需要在打包项目.csproj添加 <IsPackable>true</IsPackable>

编写脚本并保存为.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:%%p
    set "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 包管理器中搜索发布的私有包并安装
    安装

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

参考

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖的工人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值