Migración de .NET Core 2.2 a .NET Core 3.1 usando un proyecto real como ejemplo

imagen



Este artículo es una continuación lógica de la actualización del proyecto nopCommerce, un CMS de código abierto gratuito para crear tiendas en línea. La última vez hablamos sobre nuestra experiencia al migrar un proyecto de ASP.NET MVC a ASP.NET Core 2.2 . Ahora veremos el proceso de migración a .NET Core 3.1. Dado que el soporte oficial para .Net Core 3.1 durará hasta diciembre de 2022, el tema de la migración ahora es muy relevante. Por lo tanto, si desea obtener todos los beneficios del marco actualizado, mantenerse al día con las innovaciones tecnológicas y mantenerse al día con la creciente popularidad en todo el mundo, entonces es hora de comenzar la migración.



Qué tareas debían resolverse durante la transición a .NET Core 3.1



, . review .NET Core 3.0 , , , JSON. , .NET Core 2.2 . , . . , .NET Core 2.2.



.NET Core 3.1



. .NET Core 2.2 .NET Core 3.1 Microsoft. , .



Generic Host



.NET Core 2.1 Generic Host Web Host, , (DI) . .NET Core 3. Generic Host, Generic Host Builder Web Host Builder. , WPF - .



public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args)
    {
        return Host.CreateDefaultBuilder(args)
            .UseServiceProviderFactory(new AutofacServiceProviderFactory())
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder
                    .UseStartup<Startup>();
            });
    }
}


WebHostBuilder, ASP.NET Core 3.1, .





global.json



.NET Core 2.0, . SDK, . SDK .NET Core 3.0 allowPrerelease rollForward. .NET Core SDK.



{
  "sdk": {
    "version": "3.1.201",
    "rollForward": "latestFeature",
    "allowPrerelease": false
  }
}


GitHub.



, , global.json . , . , SDK , , .



ASP.NET Core Module V2



.NET Core 2.2 IIS .NET Core, Kestrel ( - .NET Core) IIS Kestrel. IIS . , , IIS Kestrel . «OutOfProcess».





.NET Core 2.2 ​​ «InProcess». IIS Kestrel, IIS. , Kestrel. , .





.NET Core 3.1 , ASP.NET Core IIS. .



<PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <Copyright>Copyright (c) Nop Solutions, Ltd</Copyright>
    <Company>Nop Solutions, Ltd</Company>
    <Authors>Nop Solutions, Ltd</Authors>
    <Version>4.4.0.0</Version>
    <Description>Nop.Web is also an MVC web application project, a presentation layer for public store and admin area.</Description>
    <PackageLicenseUrl>https://www.nopcommerce.com/license</PackageLicenseUrl>
    <PackageProjectUrl>https://www.nopcommerce.com/</PackageProjectUrl>
    <RepositoryUrl>https://github.com/nopSolutions/nopCommerce</RepositoryUrl>
    <RepositoryType>Git</RepositoryType>
    <!--Set this parameter to true to get the dlls copied from the NuGet cache to the output of your project-->
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
    <!--When true, compiles and emits the Razor assembly as part of publishing the project-->
    <RazorCompileOnPublish>false</RazorCompileOnPublish>
  </PropertyGroup>


, Linux -.

, , , .



Endpoint Routing



.NET Core 2.1 Middleware ( ASP.NET Core MVC) HTTP-. , , , , , MVC . .NET Core 2.2 , (Endpoints), .

.NET Core 3.1 Endpoint Routing , . middleware:



  • EndpointRoutingMiddleware — , URL ,
  • EndpointMiddleware




, , , middleware , .



/// <summary>
/// Configure Endpoints routing
/// </summary>
/// <param name="application">Builder for configuring an application's request pipeline</param>
public static void UseNopEndpoints(this IApplicationBuilder application)
{
    //Add the EndpointRoutingMiddleware
    application.UseRouting();

    //Execute the endpoint selected by the routing middleware
    application.UseEndpoints(endpoints =>
    {
        //register all routes
        EngineContext.Current.Resolve<IRoutePublisher>().RegisterRoutes(endpoints);
    });
}


, .

GitHub.



# 8.0



.NET Core C# 8.0. . , , “ ”.





.





nopCommerce, , .. eCommerce .



Windows 10 (10.0.19041.388), IIS 10 (10.0.19041.1) - - Kestrel . Apache JMeter, . , 50 , — 516 , — 50 , — 80 1 5 . MS SQL Server 2017 (14.0.2014.14).



JMeter , . .



20% ( )





(Average) 13.7% ( )





, .. (throughput) 12.7% ( )





, , , . , . ASP.NET Core .





— 1,5 . , 2 . .



, AspNetCoreModule, .NET Core 2.2. .





, .







.NET Core - . , , . .NET Core , . 13%. , , , . , , performance refactoring : .



, , , .NET Core , , .NET Core 3.1.0 ( 3.5.1) — security patch.



, .NET Core 3.1 LTS 2.1, , . LTS .NET Core. .NET 5, .NET Core 3.1 — .



En el futuro, planeamos actualizar aún más nuestra aplicación nopCommerce, agregando más y más características nuevas que proporciona la plataforma .NET Core. Uno de ellos es el movimiento para usar System.Text.Json en lugar de Newtonsoft.Json . Este es un enfoque más eficaz, seguro y estandarizado para manejar objetos JSON. También planeamos implementar y usar tantas funciones como sea posible que proporciona C # 8.0.



Puede obtener más información sobre nuestro proyecto en nopcommerce.com o visitando nuestro repositorio en GitHub .




All Articles