簡體   English   中英

如何解決dotnet核心中的nuget依賴地獄?

[英]How to solve nuget dependency hell in dotnet core?

我正在開發具有少數不同項目的 asp.net 核心解決方案,每個項目都使用某個版本庫的 3rd 方 NuGet 包。 這些版本,例如 1.0.0 和 2.0.0,有重大更改。 另外,這個庫是由另一個項目團隊開發的,不受我的影響。 所以在未來,將會有與另一個版本不兼容的版本,我的限制是在特定項目中使用一個確切的版本。

以下是該解決方案的最小概述:

  • 我的解決方案
    • 網絡應用程序
    • 項目1
      • 自定義庫 (v1.0.0)
    • 項目2
      • 自定義庫 (v2.0.0)

在 Visual Studio 的開發過程中,一切都很好,我可以在每個項目中使用我的版本庫的各個方法。 如果我最終發布我的應用程序,輸出文件夾中只有一個v2.0.0 的 CustomLibrary.dll

我對此有點困惑。 這個 dll 是否包含兩個版本並且 dotnet 可以在運行時解析它們? 如果不是這種情況,應用程序將在運行時失敗,因為 v1.0.0 的方法和輸出可能與 v2.0.0 完全不同。

(.NET Framework中我能做到這樣,但似乎並不在.net中的核心應用)

是否有部署同一強命名庫的不同版本的解決方案? 我想應該可以部署特定版本的 NuGet 包嗎?

如果您能幫助我,我將不勝感激。

有幾個 .NET Core 架構限制會影響應用程序設計:

  1. 不能同時加載到單個 .NET Core 處理同一程序集的不同版本。 此限制將阻止您的應用同時使用兩個項目。
  2. 沒有任何發布過程可以將程序集的兩個版本神奇地組合成一個通用程序集。

記住這一點,您需要重新設計您的應用程序並在運行時動態加載帶有 CustomLibrary v1.0.0 的 Project1。 Project2 也是如此。 您應該最終得到一個新架構,其中 Project1 和 Project2 將發布到不同的文件系統位置並在運行時動態加載。

在這種情況下,您的應用程序需要在其生命周期內同時使用 Project1 和 Project2,只要您的程序集可以很好地與可收集的 AssemblyLoadContext 一起使用,就可以了。 場景是 Project1 和 Project2 都能夠使用可收集的 AssemblyLoadContext 加載和卸載,並且應用程序將根據需要在它們之間切換。

希望這將有助於解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM