文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何将Asp.NetCore3.1开源项目升级为.Net6.0

2023-06-22 04:04

关注

小编给大家分享一下如何将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();

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开源项目升级为.Net6.0”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯