How to solve nuget dependency hell in dotnet core?
我正在使用几个不同的项目在asp.net核心解决方案上进行开发,每个项目都使用某个版本库的第三方NuGet软件包。这些版本,例如1.0.0和2.0.0具有重大变化。此外,该库是由另一个项目团队开发的,不会受到我的影响。
因此,将来会有与其他版本不兼容的版本,而我的限制是在特定项目中使用一个确切的版本。
以下是该解决方案的简要概述:
-
我的解决方案
- 网络应用
-
项目1
- CustomLibrary(v1.0.0)
-
项目2
- CustomLibrary(v2.0.0)
在Visual Studio中进行开发期间,一切都很好,我可以在每个项目中使用版本库的各个方法。如果我最终发布了我的应用程序,则输出文件夹中只有一个带有v2.0.0的CustomLibrary.dll。
对此我有些困惑。此dll是否同时包含两个版本,并且dotnet可以在运行时解析它们?
如果不是这种情况,则应用程序将在运行时失败,因为v1.0.0的方法和输出可能与v2.0.0完全不同。
(在.Net框架中,我可以执行此操作,但似乎不适用于.Net Core)。
是否存在解决方案,以部署相同强名称库的不同版本?
我想应该可以部署特定版本的NuGet软件包吗?
如果您能帮助我,我将不胜感激。
.NET Core的一些体系结构限制将影响应用程序设计:
请记住这一点,您将需要重新设计应用程序,并在运行时动态地使用CustomLibrary v1.0.0加载Project1。 Project2也是如此。您应该以一种新的体系结构结束,在该体系结构中,Project1和Project2将发布到不同的文件系统位置,并在运行时动态加载。
在这种情况下,您的应用程序在其生命周期内需要同时使用Project1和Project2,只要您的程序集可以与可收集的AssemblyLoadContext很好地配合就可以。这种情况是Project1和Project2都能够使用可收集的AssemblyLoadContext进行加载和卸载,并且应用程序将根据需要在它们之间进行切换。
希望这将有助于解决问题。