我有两台电脑,一台连接互联网,另一台则没有。
我想在离线电脑上安装一个 Nuget 包(Nuget.server)及其所有依赖项。不幸的是,仅下载包本身是不可能的,我必须手动下载所有依赖项,而这些依赖项有数十个。
我该如何在连接互联网的电脑上创建一个包含所有依赖项的包呢?
谢谢。
我有两台电脑,一台连接互联网,另一台则没有。
我想在离线电脑上安装一个 Nuget 包(Nuget.server)及其所有依赖项。不幸的是,仅下载包本身是不可能的,我必须手动下载所有依赖项,而这些依赖项有数十个。
我该如何在连接互联网的电脑上创建一个包含所有依赖项的包呢?
谢谢。
我刚经历了这种痛苦,想要找到只使用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
C:\Users\YourUsername\.nuget\packages
因此,您应该能够将.nupkg文件从那里复制到没有互联网访问的计算机上。我会在该计算机上创建一个目录,并设置一个指向该目录的新包源。或者,您可以将.nupkg文件复制到本地机器缓存中,但请注意缓存中只能有200个NuGet包的限制。然后,您可以创建一个指向缓存的包源。
Cache
,但是看到一个目录,路径末尾有"v3-cache
"。它里面装满了.DAT
文件,而不是.nupkg
文件。不确定答案是否需要更新或者我找错地方了。编辑: 看起来现在它们在C:\Users\yourName\.nuget\packages
里了? - ruffin...\.nuget\packages
中复制了所需的NuGet文件夹,将它们复制到“离线”工作站上的一个新目录中,在VS中设置了一个“本地”NuGet源,指向我复制它们的目录,然后一切就OK了。加一分! - ruffindotnet restore
命令和--packages
标志,将软件包下载到指定目录。dotnet restore --packages <TargetDirectory> <ProjectPath>
指定还原包的目录。
csproj
文件中:<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<PropertyGroup>
或者使用带有所有程序集引用的dotnet publish
。
-OutputDirectory
是不必要的。我想当我在寻找解决方案时可能把它和另一个问题混淆了。无论如何,由于我需要将下载的软件包上传到私有源,-OutputDirectory
开关帮助我将所有下载的软件包和依赖项组织到它们自己的文件夹中,清晰地显示每个软件包所需的内容。 - Adrian Sanguineti