gpt4 book ai didi

c# - 如何解决dotnet核心中的nuget依赖 hell ?

转载 作者:行者123 更新时间:2023-12-03 17:27:27 26 4
gpt4 key购买 nike

我正在开发具有少数不同项目的 asp.net 核心解决方案,每个项目都使用某个版本库的 3rd 方 NuGet 包。这些版本,例如1.0.0 和 2.0.0,有重大变化。另外,这个库是由另一个项目团队开发的,不受我的影响。
所以在 future ,将会有与另一个版本不兼容的版本,我的限制是在特定项目中使用一个确切的版本。

以下是该解决方案的最小概述:

  • 我的解决方案
  • 网络应用
  • 项目1
  • CustomLibrary (v1.0.0)
  • 项目2
  • 自定义库 (v2.0.0)

  • 在 Visual Studio 的开发过程中,一切都很好,我可以在每个项目中使用我的版本库的各个方法。如果我最终发布我的应用程序,输出文件夹中只有一个 v2.0.0 的 CustomLibrary.dll。

    我对此有点困惑。这个 dll 是否包含两个版本并且 dotnet 可以在运行时解析它们?
    如果不是这种情况,应用程序将在运行时失败,因为 v1.0.0 的方法和输出可能与 v2.0.0 完全不同。

    (在 .Net 框架中我可以做 this ,但它似乎不适用于 .Net Core)

    是否有部署同一强命名库的不同版本的解决方案?
    我想应该可以部署特定版本的 NuGet 包吗?

    如果您能帮助我,我将不胜感激。

    最佳答案

    有几个 .NET Core 架构限制会影响应用程序设计:

  • 不能同时加载到单个 .NET Core 处理同一程序集的不同版本。此限制将阻止您的应用同时使用两个项目。
  • 没有任何发布过程可以将程序集的两个版本神奇地组合成一个通用程序集。

  • 记住这一点,您需要重新设计您的应用程序并在运行时动态加载带有 CustomLibrary v1.0.0 的 Project1。 Project2 也是如此。您应该最终得到一个新架构,其中 Project1 和 Project2 将发布到不同的文件系统位置并在运行时动态加载。

    在这种情况下,您的应用程序需要在其生命周期内同时使用 Project1 和 Project2,只要您的程序集可以很好地与可收集的 AssemblyLoadContext 一起使用,就可以了。场景是 Project1 和 Project2 都能够使用可收集的 AssemblyLoadContext 加载和卸载,并且应用程序将根据需要在它们之间切换。

    希望这将有助于解决问题。

    关于c# - 如何解决dotnet核心中的nuget依赖 hell ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59211907/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com