日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發布時間:2023/12/4 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。