如何解决如何对旧版本的库运行.NET Core应用程序
我有一个使用.netstandard框架构建的库,说该库的版本是1.1.2。 现在,我有一个使用该库(版本:1.1.2)构建的.NET Core应用程序。
如果我将库版本升级到1.1.3,而无需重新编译,是否可以针对1.1.3运行相同的.NET Core应用程序?
在.NET Framework中,我们具有bindingRedirect,可以在App.Config文件中设置该绑定,使用库版本1.1.2构建的.NET Framework应用程序也可以针对版本1.1.3 / 1.1.1的库运行,而无需重新编译。.NETCore也有类似的东西吗?
解决方法
如果我将库版本升级到1.1.3,而无需重新编译,是否可以针对1.1.3运行相同的.NET Core应用程序?
是的-只需将依赖关系替换为更新的版本,它就可以正常工作(当然,假设更新的依赖关系并未从版本1.1.2更改其公共API)。
.NET Core的行为与Framework有所不同,因为它的运行时(CoreCLR)尝试通过查找版本比应用程序针对的the same or higher来解决依赖关系。
.NET Framework的CLR查找针对应用程序生成的依赖项的特定版本-前向兼容性是必须添加绑定重定向机制的原因之一。
Core的(可能更具逻辑性)方法意味着它根本不支持绑定重定向的概念-因为它不需要重定向。
在.NET Framework中,我们具有bindingRedirect,可以在App.Config文件中设置该绑定,使用库版本1.1.2构建的.NET Framework应用程序也可以针对版本1.1.3 / 1.1.1的库运行,而无需重新编译。.NETCore也有类似的东西吗?
否-如上所述,Core不支持绑定重定向,并且依赖项解析算法仅考虑相同或更新的版本。
我找不到任何文档说明为什么不对旧版本提供内置支持,但是我怀疑这与这种情况不太可能发生并且支持最终会产生很大的关系有效地导致了.NET应该避免的那种DLL地狱。
.NET Core提供了AssemblyLoadContext
类,您可以对其进行扩展以提供自己的程序集加载算法实现,以处理您的特定情况。例如,您可以编写一个AssemblyLoadContext
,该文件使用来自app.config
文件的绑定重定向规则来加载您的依赖项(是否应该这样做是另一回事)。 / p>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。