C# 如何针对旧版本的库运行.NET核心应用程序
我有一个使用.netstandard framework构建的库,并且说该库的版本是1.1.2。 现在我有了一个使用该库构建的.NET核心应用程序(版本:1.1.2) 如果我将库版本升级到1.1.3,而不重新编译,有没有办法针对1.1.3运行相同的.NET核心应用程序 在.NET Framework中,可以在App.Config文件中设置bindingRedirect,使用库版本1.1.2构建的.NET Framework应用程序也可以在1.1.3/1.1.1版本的库上运行,而无需重新编译。对于.NET Core,是否也有类似的情况 如果我将库版本升级到1.1.3,而不重新编译,有没有办法针对1.1.3运行相同的.NET核心应用程序 是-只要用更新的版本替换依赖项,它就会正常工作(当然,假设更新的依赖项没有从版本1.1.2更改其公共API) .NET Core的行为与Framework的不同之处在于,它的运行时(CoreCLR)试图通过查找与应用程序构建时所依据的版本不同的版本来解决依赖关系 .NET Framework的CLR查找应用程序构建时所依据的依赖项的特定版本,转发兼容性是必须添加绑定重定向机制的原因之一 Core的方法(可以说更符合逻辑)意味着它根本不支持绑定重定向的概念——因为它不需要它们 在.NET Framework中,可以在App.Config文件中设置bindingRedirect,使用库版本1.1.2构建的.NET Framework应用程序也可以在1.1.3/1.1.1版本的库上运行,而无需重新编译。对于.NET Core,是否也有类似的情况C# 如何针对旧版本的库运行.NET核心应用程序,c#,.net,visual-studio,.net-core,C#,.net,Visual Studio,.net Core,我有一个使用.netstandard framework构建的库,并且说该库的版本是1.1.2。 现在我有了一个使用该库构建的.NET核心应用程序(版本:1.1.2) 如果我将库版本升级到1.1.3,而不重新编译,有没有办法针对1.1.3运行相同的.NET核心应用程序 在.NET Framework中,可以在App.Config文件中设置bindingRedirect,使用库版本1.1.2构建的.NET Framework应用程序也可以在1.1.3/1.1.1版本的库上运行,而无需重新编译。对于
不,如上所述,绑定重定向在内核中不支持,依赖性解析算法只考虑相同或更新版本。
我找不到任何文档说明为什么没有对旧版本的内置支持,但我怀疑这与这样一个事实有很大关系,即这样的情况不太可能发生,而且支持它最终会导致.NET应该避免的DLL地狱类型.NET Core提供了该类,您可以对其进行扩展,以提供自己的程序集加载算法实现来处理特定情况。例如,您可以编写一个
AssemblyLoadContext
,它使用app.config
文件中的绑定重定向规则来加载您的依赖项(您是否应该这样做是另一回事)。谢谢。我知道在理想世界中没有人愿意这样做,但是,在不重新编译.NET Framework work应用程序如何使用绑定重定向的情况下,是否可以对旧版本运行它。