现在几乎所有语言都提供包管理工具,比如 JavaScript 的 npm ,Java 的 Maven ,Dart 的 pub 。.Net 程序当然是 NuGet 。NuGet 也出现很多年了,奇怪的是居然还有很多人不知道。

现在软件结构越来越复杂,在多个项目中往往需要共享一些库、组件等等。NuGet 为我们提供了方便的包管理功能。但是 NuGet 默认提供外网公开的服务,如果我们希望在公司内部或者自己家里进行一些库的管理,那么就需要自己来搭建 NuGet 私服。

Nuget 私服有几个工具可以搭建如官方的Nuget.Server 、ProGet 、BaGet 等。这里推荐 BaGet 这个工具,它跨平台又非常轻量化,易于部署,一行 docker 命令就可以运行起来。这里必选吐槽下 Nuget.Server 做为 NuGet 官方提供的一个工具居然还是依赖 Framework 的。

运行 BaGet 服务

BaGet 有多种部署方式。比如可以从 Github 上拉取 release 后的发布文件手工 dotnet 运行,也可以直接使用 docker 容器化部署。现在是容器化的时代,那么当然首先 docker 部署咯。

# The following config is the API Key used to publish packages.
# You should change this to a secret value to secure your server.
ApiKey=NUGET-SERVER-API-KEY Storage__Type=FileSystem
Storage__Path=/var/baget/packages
Database__Type=Sqlite
Database__ConnectionString=Data Source=/var/baget/baget.db
Search__Type=Database

先创建一个 baget.env 的环境变量配置文件

docker run --rm --name nuget-server -p 5555:80 --env-file baget.env -v "$(pwd)/baget-data:/var/baget" loicsharma/baget:latest

使用 docker run 命令运行



访问一下这个服务,可以看到服务成功运行起来了。但是现在一个包都没有,所以显示的是 nothing here ...

构建 NuGet 包

要推送 NeGet 包,首先我们需要包我们的库打包成 NuGet 包。



打包可以使用 nuget 的 cli 来打包。其实最简单的是在我们的项目上右键属性,在打包这个 tab 页上勾选 “在构建时生成 NuGet 包”,这样在我们每次生成项目完成的时候会在bin目录下生成对应的 nuget 包。

推送 NuGet 包

Nuget 包打包完成后,就可以推送自己的包到这个服务了。

 dotnet nuget push -s http://localhost:5555/v3/index.json .\AgileConfig.Client.1.1.8.11.nupkg

使用 dotnet nuget push 命令进行推送



推送成功会显示“已推送包”,期间有个警告,因为我们没有设置 apikey ,这个忽略。



再次刷新 BaGet 的页面,就可以看到我们刚才推送上去的包了。

使用 BaGet 源

为了能够让我们的 VisualStudio 能够检索 BaGet 服务,我们需要进行简单的配置。



打开 VS > 工具 > 选项 > NuGet 包管理器 > 程序包源,点击绿色的加号,配置源名称baget , 地址:

http://192.168.0.117:5555/v3/index.json 点击确定。



随便打开一个项目解决方案,在 NuGet 包检索页面选择程序包源给 “baget” ,浏览页面就会列出这个源当前具有的包。这样就可以正常进行管理与安装了。

总结

通过以上我们简单的演示了如果通过 docker 命令来运行一个 BaGet 服务。BaGet 跨平台、轻量化、易于部署,体验非常不错,大家可以试试。

https://github.com/loic-sharma/BaGet

关注我的公众号一起玩转技术

最新文章

  1. 用Maven部署war包到远程Tomcat服务器
  2. Android导包导致java.lang.NoClassDefFoundError
  3. java十进制转十六进制
  4. EntityFramework 7 开发纪录
  5. Java问题总结
  6. ExtJS 刷新或者重载Tree后,默认选中刷新前最后一次选中的节点代码片段
  7. linux mmap 内存映射【转】
  8. 【HDOJ】3277 Marriage Match III
  9. 对于百川SDK签名验证的问题
  10. 封装兼容性添加、删除事件的函数 addEventListener与removeEventListener
  11. Halcon相关
  12. mysql新手入门随笔2
  13. android批量打包
  14. C# 数组结构
  15. 最近一个dish项目的建设思考
  16. eclipse中maven本地库和远程阿里库的配置
  17. Altera 在线资源使用
  18. synchronized锁住的是代码还是对象
  19. java里面main函数为什么要用static修饰
  20. [CF963E]Circles of Waiting[高斯消元网格图优化+期望]

热门文章

  1. 《手把手教你》系列技巧篇(十三)-java+ selenium自动化测试-元素定位大法之By partial link text(详细教程)
  2. python算法练习(1)抓交通肇事犯
  3. 测试开发【提测平台】分享3-正式开发产品需求&项目初始化
  4. 后台程序编译过程报错PCC-F-02104, Unable to connect to Oracle
  5. 堪称教科书级别的Android音视频入门进阶学习手册,开源分享!
  6. “入职一年,那个被高薪挖来的Android开发被劝退了。”
  7. Git点赞82K!字节跳动保姆级Android学习指南,干货满满
  8. 35岁Android程序员被阿里辞退,生活压力太大痛哭,中年危机如何自救?
  9. 跟我一起写 Makefile(十)
  10. WPF自定义控件三:消息提示框