15

我有两台电脑,一台有互联网连接,另一台没有。

我想在离线计算机上安装一个 Nuget 包(Nuget.server)及其所有依赖项。不幸的是,仅仅下载包本身是不可能的,我必须手动下载所有依赖项,而且有几十个。

如何在具有 Internet 连接的计算机上创建包含所有依赖项的包?

谢谢。

4

6 回答 6

29

我刚刚经历了这个痛苦,想找到一个只使用 NuGet CLI 的解决方案。事实证明这真的很简单:

> nuget.exe install <PACKAGENAME> -OutputDirectory <OUTPUTDIR>

关键是-OutputDirectory使 CLI 将指定的包安装到其中没有项目文件的目录中的开关。运行此命令会将包及其所有依赖项下载到输出目录中,每个包都放入一个单独的子文件夹中。然后,您可以从输出目录中获取所有内容,.nupkg并对它们做任何您需要做的事情。

更新:正如 Igand 在评论中指出的那样,-OutputDirectory实际上不需要切换。如果省略 nuget.exe 只会下载到当前文件夹。仍然最好不要将其下载到其中包含项目文件的文件夹中(除非这是您所追求的)。

于 2018-04-23T23:05:32.450 回答
9

我有类似的需求,所以我创建了NuSave

缓存具有依赖项的单个 NuGet 包

nusave cache package "Newtonsoft.Json@12.0.3" --targetFrameworks ".NETStandard@1.0,.NETStandard@1.3" --cacheDir "C:\path\to\my-local-feed"

.csproj从一个文件缓存多个 NuGet 包

nusave cache csproj "C:\path\to\project.csproj" --cacheDir "C:\path\to\my-local-feed"

.sln从一个文件缓存多个 NuGet 包

nusave cache sln "C:\path\to\solution.sln" --cacheDir "C:\path\to\my-local-feed"

使用我的本地缓存离线恢复和构建解决方案

cd C:\path\to\my-solution
dotnet restore --packages C:\path\to\my-local-feed
dotnet build --no-restore
于 2016-12-12T04:04:47.373 回答
6

在可以访问 Internet 的计算机上,NuGet 包 (.nupkg) 应位于本地计算机缓存中。在 Windows 上,它位于类似于以下内容的目录中:

C:\Users\YourUsername\.nuget\packages

因此,您应该能够将 .nupkg 文件从那里复制到没有 Internet 访问权限的计算机上。我会在那台计算机上创建一个目录并设置一个指向该目录的新包源。或者,您可以将 .nupkg 文件复制到本地计算机缓存,请注意缓存中的 NuGet 包限制为 200 个。然后你可以创建一个指向缓存的包源。

于 2014-07-14T09:15:46.163 回答
3

这里的讨论有点晚了,但我遇到了同样的问题。我与一家离线工作的中型软件开发商店合作。许多新的 NuGet 包具有非常大的依赖关系树。尝试手动遍历树并下载所有必需的软件包非常麻烦。最后,我编写了 NuGet Dependency Downloader。使用它,您可以提供包 ID,可选版本,并选择是否要允许预发布包。单击“开始”后,它将下拉列出的包和它需要运行的任何依赖项。例如,当我输入“Microsoft.AspNet.Mvc”并选择“预发布”时,这个工具为 MVC 6.0 RC1 带来了 158 个包。希望这将帮助那些在离线环境中工作的人。

https://github.com/StuffOfInterest/NuGetDependencyDownloader

于 2016-11-15T11:20:41.023 回答
2

在您的项目路径中执行以下命令。

    dotnet restore --packages <Dependencies Output Dir> <Project Path>

参考:dotnet 恢复

于 2020-02-26T09:43:44.903 回答
0

在您的csproj文件中:

<Project Sdk="Microsoft.NET.Sdk">


  <PropertyGroup>
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
  <PropertyGroup>

dotnet publish所有程序集引用。

于 2019-05-20T18:42:30.100 回答