最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Asp.NetCore3.1開源項目升級為.Net6.0的方法實現(xiàn)

 更新時間:2021年12月20日 15:33:37   作者:realyrare  
自從.Net6.0出來后,一直想之前開發(fā)的項目升級.Net6.0,本文就詳細的介紹一下如何將Asp.NetCore3.1開源項目升級為.Net6.0,感興趣的小伙伴們可以參考一下

概述

自從.Net6.0出來后,一直想之前開發(fā)的項目升級.Net6.0,有時想想畢竟中間還跨了個5.0版本,升級起來不知道坑大不大,最近抽時間對升級的方案做了些研究,然后將代碼升級為.Net6.0。本質(zhì)上來說我個人不太喜歡.Net6.0去掉main方法和startup,微軟這么干讓初學者學習的門檻其實是更高了,但阻擋不住我喜歡.Net6.0項目的發(fā)布包體積確實小等!來,開干吧!

首先我們看下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的項目我還是繼續(xù)需要保持stratup,那么在AspNet.Net6.0里面如何繼續(xù)保留呢?我看到官方文檔里面有這么一句代碼可以獲取到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,而且還比較優(yōu)雅!

第二種代碼案例:

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設(shè)置為了disable。

目前VS2019上面只支持.Net6.0預覽版,VS2022支持.Net6.0項目,為了將這個項目在VS2019和2022上都能運行,于是將ImplicitUsings設(shè)置為了disable,至于Nullable設(shè)置為disable是為了不想看見那煩人的警告!

接下來就是類庫升級,那就更簡單了。

<PackageReference Include="FluentValidation.AspNetCore" Version="10.3.5" />

將之前FluentValidation.AspNetCore從8.0版本升級為10.3.5的版本,當然它的使用方式也發(fā)生了一些小變化!

#3.1代碼   
 public class LoginInputValidator : AbstractValidator<LoginInput>
    {
        public LoginInputValidator()
        {
             CascadeMode = CascadeMode.StopOnFirstFailure;
            RuleFor(x => x.LoginName).NotEmpty().WithMessage("請?zhí)顚懹脩裘Q");
            RuleFor(x => x.Password).NotEmpty().WithMessage("請?zhí)顚懹脩裘艽a");
            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升級就對了。

源碼地址:https://gitee.com/shenniu_code_group/shen-nius.-modularity?

總結(jié)

到此這篇關(guān)于Asp.NetCore3.1開源項目升級為.Net6.0的方法實現(xiàn)的文章就介紹到這了,更多相關(guān)Asp.NetCore3.1升級為.Net6.0內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 實現(xiàn)onmouseover和onmouseout應用于RadioButtonList或CheckBoxList控件上

    實現(xiàn)onmouseover和onmouseout應用于RadioButtonList或CheckBoxList控件上

    一直想實現(xiàn)onmouseover和onmouseout應用于RadioButtonList或CheckBoxList控件上。此功能就是當鼠標經(jīng)過時RadioButtonList或CheckBoxList每一個Item時,讓Item有特效顯示,離開時,恢復原樣有演示動畫,感興趣的朋友可以了解下啊
    2013-01-01
  • 配置Spring.Net框架開發(fā)環(huán)境

    配置Spring.Net框架開發(fā)環(huán)境

    這篇文章介紹了配置Spring.Net框架開發(fā)環(huán)境的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-03-03
  • ASP.NET中實現(xiàn)獲取調(diào)用方法名

    ASP.NET中實現(xiàn)獲取調(diào)用方法名

    這篇文章主要介紹了ASP.NET中實現(xiàn)獲取調(diào)用方法名的技巧,較為詳細的講述了相關(guān)的命名空間的調(diào)用及語句執(zhí)行順序,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • 簡單好用的ASP.NET分頁類(支持AJAX、自定義文字)

    簡單好用的ASP.NET分頁類(支持AJAX、自定義文字)

    這篇文章主要介紹了簡單好用的ASP.NET分頁類(支持AJAX、自定義文字),本文直接給出實現(xiàn)代碼和使用方法,需要的朋友可以參考下
    2015-06-06
  • ASP.NET緩存的方法和最佳實踐

    ASP.NET緩存的方法和最佳實踐

    您應該在應用程序的每一層都實現(xiàn)緩存。向數(shù)據(jù)層、業(yè)務邏輯層、UI 或輸出層添加緩存支持。內(nèi)存現(xiàn)在非常便宜 — 因此,通過以智能的方式在整個應用程序中實現(xiàn)緩存,可以獲得很大的性能提高
    2012-04-04
  • .Net Core中使用Autofac替換自帶的DI容器的示例

    .Net Core中使用Autofac替換自帶的DI容器的示例

    Autofac比Core中自帶的DI功能強大的多,比如:屬性注入、基于名稱注入、子容器、自定生存期管理、遲緩初始化,本文就詳細的來介紹一下.Net Core Autofac替換DI容器,感興趣的可以了解一下
    2021-06-06
  • asp.net StreamReader 創(chuàng)建文件的實例代碼

    asp.net StreamReader 創(chuàng)建文件的實例代碼

    這篇文章介紹了asp.net StreamReader 創(chuàng)建文件的實例代碼,有需要的朋友可以參考一下
    2013-07-07
  • ASP.NET獲取真正的客戶端IP地址的6種方法

    ASP.NET獲取真正的客戶端IP地址的6種方法

    Request.ServerVariables("REMOTE_ADDR") 來取得客戶端的IP地址,但如果客戶端是使用代理服務器來訪問,那取到的就是代理服務器的IP地址,而不是真正的客戶端IP地址,本文將介紹解決方法,需要的朋友可以參考下
    2012-12-12
  • C#正則用法兩例

    C#正則用法兩例

    C#正則用法兩例...
    2007-09-09
  • 在ASP.NET?MVC下限制同一個IP地址單位時間間隔內(nèi)的請求次數(shù)的解決方法

    在ASP.NET?MVC下限制同一個IP地址單位時間間隔內(nèi)的請求次數(shù)的解決方法

    有時候,當用戶請求一個Controller下的Action,我們希望,在單位時間間隔內(nèi),比如每秒,每分鐘,每小時,每天,每星期,限制同一個IP地址對某個Action的請求次數(shù),如何做呢?這篇文章主要介紹了在ASP.NET?MVC下限制同一個IP地址單位時間間隔內(nèi)的請求次數(shù),需要的朋友可以參考下
    2024-01-01

最新評論

大埔县| 鄂尔多斯市| 宁化县| 邵武市| 叙永县| 宁城县| 盱眙县| 大余县| 徐水县| 辽源市| 青冈县| 嘉定区| 廊坊市| 讷河市| 稷山县| 沙田区| 阿巴嘎旗| 安溪县| 鄂托克旗| 郧西县| 寿阳县| 永登县| 韩城市| 凭祥市| 许昌县| 兴城市| 乌兰县| 察隅县| 桃源县| 邮箱| 宾阳县| 中牟县| 辉县市| 囊谦县| 漳州市| 合水县| 莱州市| 页游| 常山县| 旬阳县| 泽州县|