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