繁体   English   中英

Nuget.exe和NuGet程序包管理器解决了不同的依赖性

[英]Nuget.exe and NuGet Package Manager resolve different dependencies

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

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

NuGet软件包管理器解决了Libuv.1.10.0

当我下载相同的软件包进行脱机安装时, nuget.exe获取Libuv.1.9.2 看截图:

nuget.exe解决了Libuv.1.9.2

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进行脱机安装所需的正确软件包?

如果在VS中查看“预览更改”对话框的输出,则所有Microsoft.AspNetCore软件包的版本均为2.0.1,而运行nuget.exe版本为1.1.x。 如果您OPCFoundation.NetStandard.Opc.Ua上查看OPCFoundation.NetStandard.Opc.Ua并展开依赖关系,则会看到它对net46netstandard2.0的1.1包具有依赖关系,而对netstandard2.0 2.0依赖关系具有依赖关系。

由此我可以推断出您的项目正在使用netcoreapp2.0netstandard2.0或更高版本,而nuget.exe可能正在使用某些.NET Framework进行依赖。

至于获取项目实际使用的相同软件包的方法,我过去已经回答了几次这个问题,通常我会链接到我第一次回答它的时候

这是我如何为离线系统安装正确的依赖项:

在在线系统上

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

在离线系统上

  1. 将软件包复制到您的脱机系统(在我的示例中为c:\\Work\\2019-07018 Nuget Offline\\
  2. 编辑Nuget Package Manager | Package Sources选项Nuget Package Manager | Package Sources Nuget Package Manager | Package Sources 添加一个指向步骤5中使用的目录的源。 指定本地包源屏幕截图
  3. 运行Nuget Package Manager
  4. 指定您在步骤6中创建的Package source指定Package Source屏幕截图
  5. 安装你的包
  6. 请注意,它似乎已安装,但实际上没有任何反应。 它正在尝试在线联系某些东西(长时间超时后会失败)。 对于每个依赖项都重复此过程。 通过断开所有接口(拔下电缆等)来加速故障。
    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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM