Asp.NetCore3.1开源项目升级为.Net6.0
概述
自从.Net6.0出来后,一直想之前开发的项目升级.Net6.0,有时想想毕竟中间还跨了个5.0版本,升级起来不知道坑大不大,最近抽时间对升级的方案做了些研究,然后将代码升级为.Net6.0。本质上来说我个人不太喜欢.Net6.0去掉main方法和startup,微软这么干让初学者学习的门槛其实是更高了,但阻挡不住我喜欢.Net6.0项目的发布包体积确实小等!来,开干吧!
首先我们看下asp.netcore3.1的program代码:
public class Program{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});}
其次我们看下asp.net core6.0的 program代码
var builder = WebApplication.CreateBuilder(args);// Add services to the container.builder.Services.AddControllers();builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();var app = builder.Build();// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{app.UseSwagger();app.UseSwaggerUI();
}app.UseHttpsRedirection();app.UseAuthorization();app.MapControllers();app.Run();
6.0和3.1program的代码相比多出一个WebApplication类,作为更高一级的抽象!然后少了startup、main方法。
需求
因为asp.netcore3.1的项目我还是继续需要保持stratup,那么在AspNet.Net6.0里面如何继续保留呢?我看到官方文档里面有这么一句代码可以获取到webhost
var builder = WebApplication.CreateBuilder(args);builder.Host.ConfigureWebHostDefaults(webBuilder =>
{webBuilder.UseStartup<Startup>();
});
心想这太完美了!然后运行报错说是不支持!!都可以拿到webhost了,为何不支持,有知道的朋友可以说一下,后面我准备去翻下源码瞅一瞅!
目前解决方案
第一种代码案例:
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).Build().Run();
这方式大家肯定很熟悉,就是我直接不需要WebApplication,而且还比较优雅!
第二种代码案例:
var builder = WebApplication.CreateBuilder(args);var startup = new Startup(builder.Configuration);
startup.ConfigureServices(builder.Services);var app = builder.Build();
startup.Configure(app, app.Environment);app.Run();
有点啰嗦,但是能用,也使用了WebApplication!
基于上面这两种方案定性选择后,后面的项目就是升级第三方,速度就快多了!这里我还是以我之前的项目为例:
首先更改mvc项目的文件(csproj)
<Project Sdk="Microsoft.NET.Sdk.Web"><PropertyGroup><TargetFramework>net6.0</TargetFramework><Nullable>disable</Nullable><ImplicitUsings>disable</ImplicitUsings><RootNamespace>ShenNius.Mvc.Admin</RootNamespace><GenerateDocumentationFile>False</GenerateDocumentationFile><SignAssembly>False</SignAssembly></PropertyGroup><PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"><NoWarn>1701;1702;CS1591</NoWarn></PropertyGroup><PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"><NoWarn>1701;1702;CS1591</NoWarn></PropertyGroup><ItemGroup><PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.10" /><PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.17" /><PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.9" /><PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.5" /></ItemGroup><ItemGroup><ProjectReference Include="..\ShenNius.Admin.API\ShenNius.Admin.API.csproj" /></ItemGroup>
</Project>
注意两点:除了将框架目标更改为.Net6.0外,另外我分别将ImplicitUsings和Nullable设置为了disable。
目前VS2019上面只支持.Net6.0预览版,VS2022支持.Net6.0项目,为了将这个项目在VS2019和2022上都能运行,于是将ImplicitUsings设置为了disable,至于Nullable设置为disable是为了不想看见那烦人的警告!
接下来就是类库升级,那就更简单了。
<PackageReference Include="FluentValidation.AspNetCore" Version="10.3.5" />
将之前FluentValidation.AspNetCore从8.0版本升级为10.3.5的版本,当然它的使用方式也发生了一些小变化!
3.1代码 public class LoginInputValidator : AbstractValidator<LoginInput>{public LoginInputValidator(){CascadeMode = CascadeMode.StopOnFirstFailure;RuleFor(x => x.LoginName).NotEmpty().WithMessage("请填写用户名称");RuleFor(x => x.Password).NotEmpty().WithMessage("请填写用户密码");RuleFor(x => x.NumberGuid).NotEmpty().WithMessage("用户编号必须传递");}}6.0代码CascadeMode = CascadeMode.Stop;
3.1mvc验证代码
mvcBuilder.AddFluentValidation(options =>{var types = Assembly.Load("ShenNius.Share.Models").GetTypes().Where(e => e.Name.EndsWith("Validator"));foreach (var item in types){options.RegisterValidatorsFromAssemblyContaining(item);}options.RunDefaultMvcValidationAfterFluentValidationExecutes = false;});6.0 mvc验证代码 mvcBuilder.AddFluentValidation(options =>{var types = Assembly.Load("ShenNius.Share.Models").GetTypes().Where(e => e.Name.EndsWith("Validator"));foreach (var item in types){options.RegisterValidatorsFromAssemblyContaining(item);}options.DisableDataAnnotationsValidation = true;});
剩下的也是一些第三方类库升级的事情,基本上凡是nuget以 microsoft开头的3.1的包往6.0升级就对了。
总结
关于asp.netcore3.1升级为asp.netcore6.0的项目升级想想是挺头痛的,只要肯动手稍微专研下,困难系数自动降级30%。另外,我来也录制了一些asp.netcore的视频放在B站,包括asp.netcore3.1升级为6.0的一些具体细节处理,只要搜用户“课间一起牛”就可以找到观看!
源码地址:https://gitee.com/shenniu_code_group/shen-nius.-modularity
Asp.NetCore3.1开源项目升级为.Net6.0相关推荐
- 【Blog.Core开源】将Program升级为.NET6.0版本
大家假期好,好久不见,之前忙于其他事情,公众号暂时搁置了一个月了,新的一年开始了,很多小伙伴开始催更了,粉丝的要求必须满足. 2022年打算重点推广BCVP社区,所以还是希望有愿意投稿的小伙伴,积极投 ...
- 中国信通院发布“可信开源项目 life cycle 2.0”,明星开源项目等你来!
以下文章来源于中国信通院CAICT,作者中国信通院CAICT 近年来,开源生态发展势头迅猛,开源在推动技术创新.促进产业协作.加快各行业数字化进程方面发挥的作用日益凸显.过去一年,开源生态进一步发展成 ...
- 创建VUE项目,vue-cli2.0版本和3.0版本的区别,将vue2.0项目升级为vue3.0项目
创建VUE项目,vue-cli2.0版本和3.0版本的区别,将vue2.0项目升级为vue3.0项目 使用vue-cli2.0版本创建vue项目 创建前的准备 开始创建 创建过程 项目正常创建 使用v ...
- ASP.NET Core 开源项目 nopCommerce,一款沉淀13年的电商开源佳作!
技术在不断更新迭代,.NET 6 的正式版也即将正式发布,在.NET Core 开源项目方面,CMS的代表作是SiteServer,商城的开源系统有没有什么代表作? 肯定是有的,强烈推荐这套开源免费的 ...
- JFlow工作流项目集成案例_Java开源项目 RuoYi v4.1.0
RuoYi平台简介 RuoYi是一个后台管理系统,基于经典技术组合(Spring Boot.Apache Shiro.MyBatis.Thymeleaf)主要目的让开发者注重专注业务,降低技术难度,从 ...
- vue 安装 less_解决旧Vue项目升级less-loader 6.0.0报错
作为一个爱折腾的主,我的package随时都是ncu -u! 何为ncu,就是检查nodejs npm/yarn项目依赖最新版本package.json一个插件! 这不,前几天less-loader ...
- 【MVC】ASP.Net MVC 4项目升级MVC 5的方法
1.备份你的项目 2.从Web API升级到Web API 2,修改global.asax,将 ? 1 WebApiConfig.Register(GlobalConfiguration.Config ...
- 【MVC4升级到MVC5】ASP.Net MVC 4项目升级MVC 5的方法
1.备份你的项目 2.从Web API升级到Web API 2,修改global.asax,将 ? 1 WebApiConfig.Register(GlobalConfiguration.Config ...
- ASP.NET MVC 开源项目 收集
Oxite NerdDinner MvcStore Suteki.Shop(http://code.google.com/p/sutekishop/downloads/list)(DEMO:http: ...
最新文章
- log-malloc2 0.2.4 发布
- 判断输入的数是否质数,求范围内的质数有哪些
- 变量的定于[指针/函数指针]
- html获取data-*值,html5 获取和设置data-*属性值的四种方法讲解
- WCF+EF实战系列一
- 百度地图检索以及路径规划
- 微信群怎么设置验证加入_怎么让微信群裂变拉人/拉人进群奖励方案/微信裂变营销方案策划...
- 财富反而越增涨,越没钱的人,财富越下降
- MFC对话框程序如何添加菜单
- Pandas数据框索引函数 iloc、loc和ix学习使用
- SPSS心理学量表总体或分维度用总分还是均分表示?【SPSS 061期】
- 使用MongoVUE
- 旅馆业治安管理信息系统
- 想知道微信怎么做指纹支付开发?看这里!
- [BZOJ5109][LOJ #6252][P4061][CodePlus 2017 11月赛]大吉大利,今晚吃鸡!(最短路+拓扑排序+传递闭包+map+bitset(hash+压位))...
- 项管行知04--项目章程
- Photoshop简单几步打造酷火焰字特…
- E. 新旧身份证(继承)
- python 矢量场的构造、计算;通过 matplotlib 作图、分析、筛选符合要求的像素点
- 微软新版edge浏览器如何开启画中画模式
热门文章
- linux jdk环境变量配置
- aspnet中gridview文本只显示开始几个文本_软网推荐:三个小软件 轻松解决文本操作难题...
- 写给深圳首期Python自动化开发周未班的信
- 4. ZooKeeper 基本操作
- bzoj2721 [Violet 5]樱花
- BZOJ1578: [Usaco2009 Feb]Stock Market 股票市场
- 设计模式(1)--简单工厂模式、策略模式
- 【转】shell pipe与输入输出重定向的区别
- 从状态转移看:载波侦听多路访问/冲突避免(CSMA/CA)
- 转仁兄:Binary search and its variation