【问题标题】:how to get all nuget dependencies for offline installation如何获取所有 nuget 依赖项以进行离线安装
【发布时间】:2014-07-13 16:02:03
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: nuget nuget-package nuget-server


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 不知道为什么还没有人对此表示赞同,但这正是我所需要的。没有第三方软件解决方案!谢谢
    • 谢谢!你的意思是从简单的控制台运行,对吧?然后即使没有 -OutputDirectory 选项它也可以工作,带有包的目录只是被下载到带有 nuget.exe 的目录中。我像“nuget install NullGuard.Fody -Version 1.8.0”一样使用它,其中名称和版本只是从给定包的 nuget.org 上的信息中复制粘贴。
    • @Igand,您绝对正确,不需要-OutputDirectory。我想我在寻找解决方案时一定很困惑,并且一定与另一个问题混为一谈。无论如何,由于我需要将下载的包上传到私人提要,-OutputDirectory 开关帮助我将所有下载的包和依赖项组织到自己的文件夹中,从而清楚每个包需要自己。
    • 如果依赖项没有下载,请确保指定 -Framework 标志(例如:-Framework netstandard2.0)
    【解决方案2】:

    我也有类似的需求,所以我创建了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
    

    【讨论】:

    • 我应该如何为您的项目恢复 nuget :D
    • 我做了,手动下载,不多。谢谢,我去看看。
    • 得到了包,而不是依赖项。不是很有用
    【解决方案3】:

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

    C:\Users\YourUsername\.nuget\packages
    

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

    【讨论】:

    • 我没有找到Cache,但确实在路径末尾看到了一个带有“v3-cache”的目录替换它。它充满了.DAT 文件,而不是.nupkg。不确定是否答案需要更新,否则我来错地方了。编辑:Looks like 他们现在在C:\Users\yourName\.nuget\packages
    • 是的,这个答案已经很老了。 NuGet 包移动到另一个目录。 docs.microsoft.com/en-us/nuget/Consume-Packages/…
    • 绝对正确的想法,不过,imo。我从...\.nuget\packages复制了我需要的nuget文件夹,复制到“离线”工作站上的新目录,通过指向我复制它们的目录在VS中设置“本地”nuget源,*poof* , 成功。 +1!
    【解决方案4】:

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

    https://github.com/StuffOfInterest/NuGetDependencyDownloader

    【讨论】:

      【解决方案5】:

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

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

      参考:dotnet restore

      【讨论】:

      • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
      【解决方案6】:

      在您的csproj 文件中:

      <Project Sdk="Microsoft.NET.Sdk">
      
      
        <PropertyGroup>
          <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
        <PropertyGroup>
      

      dotnet publish 与所有程序集引用。

      【讨论】:

      • 这有什么帮助?
      猜你喜欢
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 2021-09-13
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多