如何托管自己的NuGet Server和 Package Feed
[原文发表地址] How to host your own NuGet Server and Package Feed
[原文发表时间] April 13, 2016
托管自己的NuGet Server,尤其当你是一个公司,或者甚至是一个小的工作团队,这都是一件非常有用的事情。
这是一个能够确保每个团队建立的组件都是NuGet程序包的很好的方法,并且其他团队也可以使用这些包文件,而不是使用松散的DLL文件。
很多人(包括不久前的自己)不知道Visual Studio Team Services还为您的团队提供私人的NuGet Feed ,所以这是非常受人喜欢的。但是我想要尝试建立我自己的快速NuGet Server。我可以把它放在我私人的web服务器上或者是Azure上。
从NuGet网站可以知道:
有几个第三方可用 的NuGet 服务器使远程私人的包文件易于配置和设置,包括Visual Studio Team Services , MyGet , Inedo's ProGet,JFrog's Artifactory,NuGet Server 和 Sonatype's Nexus。请参见An Overview of the NuGet Ecosystem去了解更多有关这些选项的概述。
将共享文件或者目录作为NuGet Server
从NuGet 3.3开始, 你可以只使用一个本地文件夹,它可以建立分层 NuGet feed。所以我先运行了这些命令行,以确保 NuGet 是最新的。
C:\Users\scott\Desktop>nuget update -self
Checking for updates from https://www.nuget.org/api/v2/.
Currently running NuGet.exe 3.3.0.
NuGet.exe is up to date.
然后为我的“本地服务器”创建一个文件夹,然后在那里运行“nuget init source dest”,这里的”source”是一个包含很多*.nupkg文件的文件夹。
此命令将把所有软件包从 nupkgs 的平面文件夹添加到分层布局中的目的包源,如下所述。在对您的包源执行还原或更新时,相比于文件夹中的 nupkg 文件,下面的布局有显著的性能优势。
有两种方式来运行由Web服务器处理的”remote feed”,而不是”local feed”,这个只是一个文件夹或者共享文件。你可以使用NuGet.Server或者运行你自己的NuGet Gallery内部副本。Gallery对于大型多用户机构或企业来说是很有吸引力的。NuGet.Server 比较适用于小的团队或者你自己和你的CI(持续集成)系统中。
创建一个简单的基于Web的NuGet.Server
从 Visual Studio 中,使用ASP.NET 4.x 的空模板创建一个空的 ASP.NET Web 应用程序。
然后转到References | Manage NuGet Packages , 找到 NuGet.Server并安装它。你将得到所有你需要的依赖项并且你的空项目将被填满!如果你看到一个关于覆盖web.config的警告,你的确需要一个远程的web.config,所以覆盖你本地的这个。
下一步,进入你的 Web.config,注意你可以设置 packagesPath。我使用 C:\LocalNuGet。运行应用程序,您会有一个 NuGet 服务器 !
因为我 的NuGet.Server 是从 C:\LocalNuGet路径得到的,正如前面提到的我可以创建包含 NuPkg 文件 的平面的 文件夹,并将它们用下面方式导入 ︰
nuget init c:\source c:\localnuget
我还可以在 web.config 中设置一个API密钥 (如果不设置的话,就有些冒险),然后由我的自动的build将 NuGet 程序包发布到我的服务器 ,像这样︰
nuget push {package file} -s https://localhost:51217/nuget {apikey}
再次提醒一下,当你可以完全做这些的时候,有很多外面的服务器托管,这对一些企业来说是很好的。MuGet在Azure上运行,并且 VSO/TFS也支持创建和托管NuGet feeds 。
有些人说他们试过 NuGet.Server (强调下,这是小的服务器,不是gallery) 很多年前,发现它不能扩展或很慢。这个新版本 使用扩展文件夹格式,添加大量缓存,所以如果你只看到"文件包含了平面的nupkg 文件"版本,那么你应该试试新的这一个 !它的版本为 2.10 +。它快多少?命令 /Nuget (冷启动,无数据缓存) 第一次请求相应时间是 75. 266秒,之后是8.428秒!
主要的一点是如果你有一个自动的构建系统然后你真的应该创建 NuGet 程序包并将其发布到feed。如果你正在使用另一组程序集,您应该从他们的feed中使用版本控制软件包。每个团队会创建许多程序包并通过NuGet server使整个团队工作贯通起来。
注意!如果您 使用网络共享 NuGet.Server,确保你有最新的版本,因为此文件的文件夹结构可以给你主要的性能改进 !
在你的团队里是怎么操作NuGet的?你们有NuGet Server吗?有的话,是哪一个?