我有两台电脑,一台有互联网连接,另一台没有。
我想在离线计算机上安装一个 Nuget 包(Nuget.server)及其所有依赖项。不幸的是,仅仅下载包本身是不可能的,我必须手动下载所有依赖项,而且有几十个。
如何在具有 Internet 连接的计算机上创建包含所有依赖项的包?
谢谢。
我有两台电脑,一台有互联网连接,另一台没有。
我想在离线计算机上安装一个 Nuget 包(Nuget.server)及其所有依赖项。不幸的是,仅仅下载包本身是不可能的,我必须手动下载所有依赖项,而且有几十个。
如何在具有 Internet 连接的计算机上创建包含所有依赖项的包?
谢谢。
我刚刚经历了这个痛苦,想找到一个只使用 NuGet CLI 的解决方案。事实证明这真的很简单:
> nuget.exe install <PACKAGENAME> -OutputDirectory <OUTPUTDIR>
关键是-OutputDirectory
使 CLI 将指定的包安装到其中没有项目文件的目录中的开关。运行此命令会将包及其所有依赖项下载到输出目录中,每个包都放入一个单独的子文件夹中。然后,您可以从输出目录中获取所有内容,.nupkg
并对它们做任何您需要做的事情。
更新:正如 Igand 在评论中指出的那样,-OutputDirectory
实际上不需要切换。如果省略 nuget.exe 只会下载到当前文件夹。仍然最好不要将其下载到其中包含项目文件的文件夹中(除非这是您所追求的)。
我有类似的需求,所以我创建了NuSave。
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
在可以访问 Internet 的计算机上,NuGet 包 (.nupkg) 应位于本地计算机缓存中。在 Windows 上,它位于类似于以下内容的目录中:
C:\Users\YourUsername\.nuget\packages
因此,您应该能够将 .nupkg 文件从那里复制到没有 Internet 访问权限的计算机上。我会在那台计算机上创建一个目录并设置一个指向该目录的新包源。或者,您可以将 .nupkg 文件复制到本地计算机缓存,请注意缓存中的 NuGet 包限制为 200 个。然后你可以创建一个指向缓存的包源。
这里的讨论有点晚了,但我遇到了同样的问题。我与一家离线工作的中型软件开发商店合作。许多新的 NuGet 包具有非常大的依赖关系树。尝试手动遍历树并下载所有必需的软件包非常麻烦。最后,我编写了 NuGet Dependency Downloader。使用它,您可以提供包 ID,可选版本,并选择是否要允许预发布包。单击“开始”后,它将下拉列出的包和它需要运行的任何依赖项。例如,当我输入“Microsoft.AspNet.Mvc”并选择“预发布”时,这个工具为 MVC 6.0 RC1 带来了 158 个包。希望这将帮助那些在离线环境中工作的人。
https://github.com/StuffOfInterest/NuGetDependencyDownloader
在您的csproj
文件中:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<PropertyGroup>
或dotnet publish
所有程序集引用。