簡體   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