首页 > 解决方案 > 下载用于离线开发/发布的 Nuget 包

问题描述

简短的问题

有没有办法以编程方式下载构建/发布解决方案所需的所有 Nuget 包并将它们输出到可以移动到本地 Nuget 存储库的单个目录中?

一些背景

在我工作的地方,大多数开发都是在一个气隙网络(没有互联网)上完成的。在最近的一个项目中,我能够在我们的支持互联网的网络上进行开发。这恰好是在支持 Internet 的网络上开发的第一个应用程序,也是我们开发的第一个 ASP.NET Core 应用程序。该解决方案在面向 Internet 的网络上构建、运行和发布都很好。我现在正试图将解决方案移至气隙网络,但在迁移所有依赖项时遇到问题。

起初,由于缺少 ASP.NET Core nuget 包,该解决方案无法构建;因此,我将用于开发应用程序的机器上的本地缓存中的所有nuget 包复制到气隙网络上的本地 Nuget 存储库。现在应用程序已构建,但我似乎无法发布Web 项目(ASP.NET Core)。我收到了 25 个以上的错误:

  • 找不到包 runtime.any.System.Diagnositics.Tools。源中不存在具有此 ID 的软件包...
  • 找不到版本 (>= 2.1.6) 的 Nicrosoft.NETCore.App...
  • 找不到...

当我尝试从 Visual Studio 运行(使用 IIS Express)时,我也收到运行时错误“无法显示此页面”,但我不确定这是否是相关问题。单元/集成测试运行良好。

我可以尝试从 Nuget.org手动下载每个 nuget 包并将它们移动到气隙网络,但是将东西从一个网络移动到另一个网络需要几个小时。无论如何,我是否可以自动检索构建/发布解决方案所需的所有 nuget 包,以便我可以从一个网络到另一个网络进行一次传输,而不是移动我拥有的东西并等待看看有什么问题?最好我想要一个可以查看 sln 文件并将所有必要的 nuget 包放入指定目录的 exe 或 PowerShell 脚本。

标签: asp.net-corenuget.net-standard

解决方案


在启用 Internet 的开发环境中,您可以浏览到项目的根目录并使用:

dotnet restore --packages .\package\

这将使用名为“packages”的目录作为解决方案的本地缓存,并且所有 nuget 文件都将复制到该目录。

然后,您可以在构建中包含相同的开关,以确保使用本地缓存。

dotnet build --packages .\package\

推荐阅读