繁体   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