使用私有 Nuget 源

[ 博客首页 ]
黄杰, 2016-11-17
root[a]linuxsand.info

本文写于2016年,部分信息或已失效。
2022年5月更新:可以使用 BaGetNuGet.Server 自行搭建基于HTTP的软件源,前者可跨平台部署。

前言

与其手工安装管理依赖,不如使用包管理工具。在 .NET 生态里,我们使用 Nuget。

工具有了,软件源在哪里?就是 https://nuget.org 啦。

有了公开软件源,为啥我还要搭建私有源(private feeds)呢?

  1. 我的开发工作全是在虚拟机里进行,公司规定虚拟机不能联网
  2. 部分包会是自己编写,用于公司业务,不能上传到公共 Server

但是,作为一家工业自动化集成公司而不是软件公司,我司不提供一个服务器空间用于搭建私有服务器,所以只好使用共享目录来储存分发软件包了。

(同样原因,托管 Git 仓库也是用了 Local Protocol 的……)


NuGet 基本操作

下载 nuget:

安装、使用 nuget:

对于命令行(CLI)的 nuget,安装某个包的命令就是:nuget install package。写本文时(2016-dec-1)的最新版本是 3.4.4.1321

对于 Visual Studio 内的 Nuget Package Manager,它提供一个图形界面(GUI)和一个控制台(Console)。


搭建私有仓库

到这里终于讲到正题:如何搭建(基于文件系统的)私有仓库。

官方链接: http://docs.nuget.org/ndocs/hosting-packages/local-feeds,有以下 2 种情况。

NuGet 3.3+

按照链接内容操作后,我本机某个目录的结构如下。

Z:\D\Resources\01 PC End\03 .NET\30 NugetServer>tree
Z:.
└─packages
    └─xxxxx
        └─1.0.0
    └─yyyyy
        └─2.0.0

注意:这种“层级式(hierarchical)”结构需要 nuget 3.3+ 才支持。

旧版本的 NuGet

如果你用的是老版本的 Package Manager Console(上一节提到,VS 2010 安装的是 2.8 版本),那就把所有的 *.nupkg 放在同一个目录下。

Z:\D\Resources\01 PC End\03 .NET\30 NugetServer>tree /f
Z:.
└─packages
    └─xxxxx
    └─yyyyy

针对这 3 种情况使用正确的目录结构后,在 Visual Studio 的 Package Manager Settings中,新增加的 source 为:Z:\D\Resources\01 PC End\03 .NET\30 NugetServer\packages


使用本地仓库

接着就可以在某个解决方案中,使用本地的包啦,下面是使用 console 安装的:

PM> Install-Package xxxxx
Installing 'xxxxx 1.0.0'.
Successfully installed 'xxxxx 1.0.0'.
Adding 'xxxxx 1.0.0' to WpfApplication1.
Successfully added 'xxxxx 2.0.0' to WpfApplication1.

另外,当你在 nuget.org 下载安装某个包后,会默认存放到本地缓存中(%userprofile%\AppData\Local\NuGet\Cache),因此也可以把这个路径作为一个本地私有仓库。


自己制作 NuGet 包

可以把常用的代码片段封装为类库(Class Library),再制作成 nuget 包(.nupkg),放到本地仓库供未来其它项目使用。

打包的过程见: https://docs.nuget.org/ndocs/quickstart/create-and-publish-a-package


参考链接