首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nuget.exe和NuGet包管理器解决不同的依赖关系

Nuget.exe和NuGet包管理器解决不同的依赖关系
EN

Stack Overflow用户
提问于 2019-07-19 16:03:50
回答 2查看 1.3K关注 0票数 1

我希望将OPCFoundation.NetStandard.Opc.Ua版本1.4.355.26 (及其所有依赖项)安装到脱机计算机上。我的在线和离线机器都在运行Visual Studio 2019 16.1.3

当我使用OPCFoundation.NetStandard.Opc.Ua版本1.4.355.26安装NuGet Package Manager时,它会安装许多依赖项,包括Libuv.1.10.0。见截图:

当我下载相同的包用于脱机安装时,nuget.exe将获取Libuv.1.9.2。见截图:

代码语言:javascript
复制
C:\Users\cstankevitz\Downloads>nuget.exe install OPCFoundation.NetStandard.Opc.Ua
Feeds used:
  https://api.nuget.org/v3/index.json
  C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\

Installing package 'OPCFoundation.NetStandard.Opc.Ua' to 'C:\Users\cstankevitz\Downloads'.
  GET https://api.nuget.org/v3/registration3-gz-semver2/opcfoundation.netstandard.opc.ua/index.json
  OK https://api.nuget.org/v3/registration3-gz-semver2/opcfoundation.netstandard.opc.ua/index.json 558ms


Attempting to gather dependency information for package 'OPCFoundation.NetStandard.Opc.Ua.1.4.355.26' with respect to project 'C:\Users\cstankevitz\Downloads', targeting 'Any,Version=v0.0'
Gathering dependency information took 16.89 sec
Attempting to resolve dependencies for package 'OPCFoundation.NetStandard.Opc.Ua.1.4.355.26' with DependencyBehavior 'Lowest'
Resolving dependency information took 0 ms
Resolving actions to install package 'OPCFoundation.NetStandard.Opc.Ua.1.4.355.26'
Resolved actions to install package 'OPCFoundation.NetStandard.Opc.Ua.1.4.355.26'
Retrieving package 'Libuv 1.9.2' from 'nuget.org'.
...

当然,当我将下载的包带到脱机计算机并使用Visual Studio 2019 NuGet Package Manager安装它们时,安装会失败,因为Libuv.1.10.0不可用。

如何让nuget.exe (或任何其他工具)下载NuGet Package Manager脱机安装所需的正确包?

EN

回答 2

Stack Overflow用户

发布于 2019-07-22 17:22:27

下面是如何将正确的依赖项安装到脱机系统中:

论网络系统

  1. 获取https://github.com/StuffOfInterest/NuGetDependencyDownloader的源
  2. 编辑PackageTools.cs并修改函数GetRangedPackageVersion,使其包含下面的代码。这是为了修复一个"bug“,在这个”bug“中,当较新的包可用时,不会下载旧的包--但是下面的步骤9将需要旧的包。
  3. 编译并运行NuGetDependencyDownloader以下载包及其依赖项
  4. 将包复制到外部驱动器

论离线系统

  1. 将包复制到脱机系统(在我的示例中是c:\Work\2019-07018 Nuget Offline\)
  2. 编辑Nuget Package Manager | Package Sources选项。添加指向步骤5. 指定本地包源屏幕中使用的目录的源。
  3. 运行Nuget Package Manager
  4. 指定您在步骤6. 指定包源屏幕截图中创建的指定包源屏幕截图
  5. 安装您的软件包
  6. 请注意,它似乎安装,但实际上什么都没有发生。它试图在网上联系一些东西(在长时间超时后会失败)。对于每个依赖项,都会重复这种情况。通过断开所有接口(拔掉电缆等)来加速故障。
代码语言:javascript
复制
    private IPackage GetRangedPackageVersion(IQueryable<IPackage> packages, IVersionSpec versionSpec)
    {
      packages = packages.Where(o => o.Version == versionSpec.MinVersion);

      IPackage package = packages
          .OrderByDescending(o => o.Version)
          .FirstOrDefault();

      return package;
    }
票数 2
EN

Stack Overflow用户

发布于 2019-07-21 14:25:33

如果您查看VS中预览更改对话框的输出,所有的Microsoft.AspNetCore包都是2.0.1版本,而运行nuget.exe时,它的版本为1.1.x。如果您论nuget.org并展开依赖项,您将看到它对net46netstandard2.0的1.1包有依赖关系,而对于netstandard2.0则有2.0依赖关系。

由此可以推断,您的项目使用的是netcoreapp2.0netstandard2.0或更高版本,而nuget.exe则可能使用一些.NET框架作为依赖项。

至于获得项目实际使用的相同包的方法,我过去曾多次回答这个问题,我通常使用链接到我第一次回答它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57116073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档