如何在没有互联网的构建服务器/生产服务器上使用NuGet包?

问题描述 投票:6回答:4

背景

我有以下组件:

  • 我的本地解决方案(.NET 4.5)使用NuGet包。
  • 我的解决方案中的PowerShell构建脚本,其目标是构建,运行单元测试,Web.config转换等。
  • 没有连接互联网的构建服务器运行CruiseControl.NET,调用我的构建脚本来构建文件。它还可以作为开发构建的(IIS7)环境。
  • IIS7的生产服务器,无法访问Internet。

目标

我想从我的解决方案中利用NuGet包,并将它们作为源的一部分存储在本地 - 而不必依赖我的构建和生产服务器上的互联网连接或nuget包服务器。

  • 如何告诉MSBuild正确部署这些软件包,或者这是NuGet的默认行为?
asp.net-mvc msbuild continuous-integration cruisecontrol.net nuget
4个回答
9
投票

Scott Hanselman撰写了一篇名为How to access NuGet when NuGet.org is down (or you're on a plane)的优秀文章。如果你仔细阅读这篇文章,你最后会看到他提出的建议主要是临时类型的解决方案,并且他会尽力说除了那些紧急情况之外你永远不需要离线缓存。

但是,如果你在他的文章的底部阅读,他提出这个建议:

如果您担心公司范围内的外部依赖关系,您可能希望在组织内拥有一个包含您依赖的NuGet包的网络共享(可能在共享构建器服务器上)。如果您作为一个组织处于低带宽状态,这是一个有用的事情。

这就是我在类似情况下最终做的事情。我们有一个共享,我们保持与我们依赖的各种软件包的最新版本(当然,我假设你在某种类型的网络)。它运行良好,只需要一点点工作就可以半定期更新软件包(我们有一个季度更新周期)。

另一篇也可能对你有帮助的文章(对我而言)是:Using NuGet to Distribute Our Company Internal DLLs


0
投票

默认情况下,Nuget将所有依赖项放在packages/文件夹中。您只需将此文件夹添加到源控制系统,Nuget就不需要在构建时从Internet下载任何内容。您还需要确保未在解决方案上配置Nuget Package Restore。


0
投票

你必须做出决定;您是在构建时下载/安装软件包(无论是使用软件包还原,您自己的脚本,还是为您执行此操作的构建工具),或者将/ packages程序集放在源代码管理中,就像它们位于/中一样lib目录。

我们在内部使用包恢复和NuGet的Visual Studio扩展时遇到了很多问题,我们几乎完全废弃了NuGet,因为它存在缺陷,尽管我们公司的2个产品中有1个是私有的NuGet存储库。

基本上,我们管理生命周期的方式是使用我们的产品BuildMasterProGet的组合,以便:

  • ProGet缓存我们所有的Nu​​Get包(我们自己发布的包和来自nuget.org的包)
  • BuildMaster执行CI和部署方面,并处理所有NuGet包恢复,因此我们永远不必处理大量的签入库或解决方案变更的恶梦,即包恢复

如果您采用类似的过程,最简单的方法是在第一个环境中创建构建工件,其中包括已安装的NuGet软件包程序集,然后只需将该工件部署到生产环境中,而无需重复此过程。

希望这可以帮助, -Tod


0
投票

我知道这是一个古老的讨论,但是由于规模大小,存储构建项目所需的所有文件在世界上是多么糟糕?

如果一个库不可用你应该替换它的想法是疯了。代码需要花钱,因为你不能在git或nuget上控制库,所以应该有副本。

许多公司的一个要求是审计。如果发现某个图书馆窃取了你的数据怎么办?您如何确定是否从NUGET中删除了库,而您甚至无法构建代码来进行双重检查。

一个尺寸适合所有Nuget和git方式的网络是不行的。

我认为Nuget过去的工作方式是将文件存储在本地并可选择放置在源代码控制中。

© www.soinside.com 2019 - 2024. All rights reserved.