除了按照网上常规Net8升级步骤外,编译和运行都会发生一些异常和错误,代码兼容性根据提示倒是可以修改。倒是运行时错误,网上资料比较少,下面会持续登记升级过程中踩的坑:
1. MediatR 库升级到最新的12.2后,报错各种服务找不到,实际是没有DI实现:
原来注册一般这么写:
1 services.AddMediatR(Assembly.GetExecutingAssembly());
升级后改成如下:
1 services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly()));
2. AutoMapper库升级到13.0.1后,老的 AutoMapper.Extensions.Microsoft.DependencyInjection 库就可以删除引用了。
<PackageReference Include="AutoMapper" Version="13.0.1" /> <!--<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.0" />-->
3. 升级到net8后,使用JWT认证的地方,一般是: AddJwtBearer(option => ...{ } ),要增加一个属性来兼容老代码: option.UseSecurityTokenValidators = true; ,否则认证会失败:
1 option.SecurityTokenValidators.Clear(); 2 option.UseSecurityTokenValidators = true; 3 option.SecurityTokenValidators.Add(new UserTokenValidation(appSetting, httpContextAccessor)); 4 option.SaveToken = true;
Net8为了性能的提升,废弃了如上写法: 参考 CS0618
兼容不是好办法,最好的还是按照建议,实现验证TokenHandlers。
升级到Net8后,初步体验到速度确实有提升,至少打包后exe和dll都变小了,依赖ref也少了许多。其它待查问题后续更新中...
标签:option,升级,AutoMapper,Net8,Net7,true From: https://www.cnblogs.com/pccai/p/18051537