[ 博客首页 ]
黄杰, 2016-11-17
root[a]linuxsand.info
本文写于2016年,部分信息或已失效。
2022年5月更新:可以使用
BaGet 或
NuGet.Server
自行搭建基于HTTP的软件源,前者可跨平台部署。
与其手工安装管理依赖,不如使用包管理工具。在 .NET 生态里,我们使用 Nuget。
工具有了,软件源在哪里?就是 https://nuget.org 啦。
有了公开软件源,为啥我还要搭建私有源(private feeds)呢?
但是,作为一家工业自动化集成公司而不是软件公司,我司不提供一个服务器空间用于搭建私有服务器,所以只好使用共享目录来储存分发软件包了。
(同样原因,托管 Git 仓库也是用了 Local Protocol 的……)
下载 nuget:
安装、使用 nuget:
对于命令行(CLI)的 nuget,安装某个包的命令就是:nuget install package
。写本文时(2016-dec-1)的最新版本是 3.4.4.1321
对于 Visual Studio 内的 Nuget Package Manager,它提供一个图形界面(GUI)和一个控制台(Console)。
Install-Package package
到这里终于讲到正题:如何搭建(基于文件系统的)私有仓库。
官方链接: http://docs.nuget.org/ndocs/hosting-packages/local-feeds,有以下 2 种情况。
按照链接内容操作后,我本机某个目录的结构如下。
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+ 才支持。
如果你用的是老版本的 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),因此也可以把这个路径作为一个本地私有仓库。
可以把常用的代码片段封装为类库(Class Library),再制作成 nuget 包(.nupkg),放到本地仓库供未来其它项目使用。
打包的过程见: https://docs.nuget.org/ndocs/quickstart/create-and-publish-a-package