3.2 NuGet包同时支持.NET Framework和.NET Standard
价值:
同时兼容.NET Framework和.NET Standard
兼容现有代码引用,减少对引用方的影响
3.3 同时兼容App.config和Web.Config文件
引用Nuget:System.Configuration.ConfigurationManager
兼容Web.Config文件中对配置的访问。
3.4 单元测试兼容App.config和Web.Config文件
单元测试情况下,在单元测试工程中增加了app.config文件,但是实际无法读取其中的配置,原因是:
MSTest is running as testhost.dll, which means that ConfigurationManager is reading settings from testhost.dll.config when executing under .NET core. It will look for testhost.dll.config where the testhost.dll is located as the accepted answer states. What is not mentioned is that it will also look for testhost.dll.config in the location where you have your test dlls
如何解决,大家可以参考这个连接:https://stackoverflow.com/questions/47752271/app-config-not-beeing-loaded-in-net-core-mstests-project/47753580
3.5 MyBatis.NET 升级.NET Core
MyBatis.NET作为数据访问组件,社区早已不在维护,升级.NET Core我们做了哪些改造?
替换System.Web.HttpContextiBatis.net针对asp.net应用提供了HybridWebThreadSessionStore,通过HttpContext存储每个http请求线程访问数据库的上下文。由于ASP.Net Core不再提供直接获取HttpContext的方法,取而代之的是提供IHttpContextAccessor接口,并通过注册HttpContextAccessor来获取,因此在sqlmap初始化时,将获取HttpContext的委托方法传到HybridWebThreadSessionStore,使得每次ibatis.net需要获取HttpContext时,都会从HttpContextAccessor中拿到。
替换System.Runtime.Remoting.Messaging.CallContextiBatis.net针对非web的应用也提供了CallContextSessionStore,通过CallContext来维护每个线程访问数据库的上下文。但.net core不再提供CallContext类,因此需要将CallContext替换为AsyncLocal类型的字典集合。Emit动态生成程序集相关改动。
对于一些使用Emit动态生成程序集的操作,例如DefineDynamicAssembly,由于原AppDomain中已经不再支持,需要进行一些相应的类的调整。
4、业务服务升级.NET Core
5、.NET Framework和.NET Core并行、兼容运行,线上逐步升级
技术平台层面:通过HTTP和TCP协议适配,实现微服务在.NET Framework和.NET Core下并行、兼容运行
大规模升级步骤:非核心业务-新业务-核心业务,逐个系统升级、上线
四、未来技术规划
全面升级.NET 6, 构建下一代云原生架构的互联网技术平台
以上是2021年.NET Conf China 技术大会上,我给大家分享了主题《轻松玩转.NET大规模版本升级》的主要内容。