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

技术如何将Asp.NetCore3.1开源项目升级为.Net6.0小编给大家分享一下如何将Asp.NetCore3.1开源项目升级为.Net6.0,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读

边肖将与您分享如何升级Asp。NetCore3.1开源项目。Net6.0,相信大部分人还不太了解,所以分享这篇文章给大家参考。希望你看完这篇文章会有很多收获。我们一起来看看吧!

00-1010自。Net6.0出来后,我一直想把之前开发的项目升级到。Net6.0 .有时候我觉得毕竟中间有一个5.0版本。不知道升级坑大不大。最近花时间对升级方案做了一些研究,然后把代码升级到。Net6.0,本质上我个人是不喜欢的。Net6.0移除主要方法和启动。对于初学者来说,微软学习的门槛其实更高,但是我无法阻止的发布包。我喜欢的Net6.0项目真的很小!来吧,我们开始吧!

我们先来看看asp.netcore3.1的程序代码:

publicclassProgram

{

publicstaticvoidMain(字符串[]参数)

{

CreateHostBuilder(参数)。构建()。run();

}

publicationstatichostbuilder createhostbuilder(字符串[]参数)=

主持人。CreateDefaultBuilder(参数)。配置网络主机默认值(网络构建器=

{

webBuilder。UseStartupStartup();

});

}其次,我们来看看ASP.NET Core 6.0的程序代码。

varbuilder=WebApplication。create Builder(args);

//addservicestocontainer。

建筑商。服务。添加控制器();

建筑商。services . AddEndpointsApiExplorer();

建筑商。services . AddSwaggerGen();

varapp=builder。build();

//configureethhettprequestpipeline。

if(app。环境. IsDevelopment())

{

app。useswaggle();

app。UseSwaggerUI();

}

app。usehttpredirection();

app。UseAuthorization();

app。MapControllers();

app。run();与3.1程序代码相比,6.0多了一个WebApplication类作为更高层次的抽象!那么启动和主要方法就没了。

概述

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

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/153653.html

(0)

相关推荐

  • 非极性分子,极性分子和非极性分子有哪些

    技术非极性分子,极性分子和非极性分子有哪些分子的极性(永久烷极)是由其中正、负电荷的“重心”是否重合所引起的。根据其分子在空间是否绝对对称来判定极性非极性分子,化学键极性的向量和——弱极矩μ则是其极性大小的客观标度.甲苯

    生活 2021年10月23日
  • 香港服务器租用有哪些好处

    技术香港服务器租用有哪些好处租用香港服务器有许多好处。它们有助于克服在其他海外服务器上网站时可能面临的所有缺点和限制。虽然,香港服务器租用服务比其他租用解决方案昂贵。但是,对于大陆地区的站长来说香港服务器的CN2线路能够

    礼包 2021年12月21日
  • 站内链接有什么作用

    技术站内链接有什么作用这篇文章主要介绍“站内链接有什么作用”,在日常操作中,相信很多人在站内链接有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”站内链接有什么作用”的疑惑有所帮助!

    攻略 2021年11月2日
  • 如何用Python爬取英雄联盟,lol全部皮肤

    技术如何用Python爬取英雄联盟,lol全部皮肤今天就跟大家聊聊有关如何用Python爬取英雄联盟(lol)全部皮肤,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获

    攻略 2021年10月26日
  • 4.运算符和流程控制

    技术4.运算符和流程控制 4.运算符和流程控制运算符
    在 PHP 中,赋值运算符 = 用于给变量赋值。
    在 PHP 中,算术运算符 + 用于把值加在一起
    1.算数运算符运算符
    名称
    描述
    实例
    结果x

    礼包 2021年12月23日
  • 如何使用Ant进行ssh和scp操作

    技术如何使用Ant进行ssh和scp操作今天就跟大家聊聊有关如何使用Ant进行ssh和scp操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。使用Ant进行ssh

    攻略 2021年11月10日