Migration de .NET 5.0 vers .NET 6.0

Nous avons beaucoup parlé de .NET dernièrement , mis en place de nombreux projers d’exemple en .NET mais que se passe t-il lorsque nous souhaitons migrer du framework 5.0 vers le 6.0 ? Quels sont les étapes clés pour la réussite de ce processus ?

Je vais tenter de vous aiguiller pour que tout cela se passe sans douleur 😁

1-Migration des fichiers csproj

Il va falloir éditer « a la main » les fichiers projets comme suit :

// Old
<PropertyGroup>
 <TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
// New
<PropertyGroup>
 <TargetFramework>net6.0</TargetFramework>
 <Nullable>enable</Nullable>
 <ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
2-Mettra jour les packages NuGet

Vous pouvez soit le faire via le gestionnaire de packages en mode graphique ,soit via la modification du fichier csproj encore une fois:

// Old
<ItemGroup>
 <PackageReference Include=”Microsoft.AspNetCore.Authentication.JwtBearer” Version=”5.0.11" />
 <PackageReference Include=”Microsoft.AspNetCore.Identity.UI” Version=”5.0.11" />
 <PackageReference Include=”Microsoft.AspNetCore.Mvc.Versioning” Version=”5.0.0" />
 <PackageReference Include=”Microsoft.EntityFrameworkCore.Design” Version=”5.0.11">
 <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
 <PrivateAssets>all</PrivateAssets>
 </PackageReference>
 <PackageReference Include=”Swashbuckle.AspNetCore” Version=”5.6.3" />
 </ItemGroup>
// New
<ItemGroup>
 <PackageReference Include=”Microsoft.AspNetCore.Authentication.JwtBearer” Version=”6.0.0" />
 <PackageReference Include=”Microsoft.AspNetCore.Identity.UI” Version=”6.0.0" />
 <PackageReference Include=”Microsoft.AspNetCore.Mvc.Versioning” Version=”5.0.0" />
 <PackageReference Include=”Microsoft.EntityFrameworkCore.Design” Version=”6.0.0">
 <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
 <PrivateAssets>all</PrivateAssets>
 </PackageReference>
 <PackageReference Include=”Swashbuckle.AspNetCore” Version=”6.2.3" />
</ItemGroup>
3- Mettre à jour les namespaces

La définition des namespaces a changé même si elle n’a pas d’impact c’est quand même mieux donc dans vos fichiers csharp (cs) , modifiez comme suit :

// Old
namespace MyApplication
{
 public class User
 {
 public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
 }
}
// New
namespace MyApplication;
public class User
{
 public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
 
 public string Email { get; set; }
}
4- Migrer votre classe StartUp vers la classe Program

En effet en .NET 6.0, il n’y a plus qu’un fichier Program qui rassemble Program et StartUp.

Voici ce que vous avez dans le StartUp .NET 5.0 :

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace MyApplication
{
 public class Startup
 {
 public Startup(IConfiguration configuration)
 {
 Configuration = configuration;
 }
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
 public void ConfigureServices(IServiceCollection services)
 {
 services.AddRazorPages();
 }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
 {
 if (env.IsDevelopment())
 {
 app.UseDeveloperExceptionPage();
 }
 else
 {
 app.UseExceptionHandler(“/Error”);
 // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
 app.UseHsts();
 }
app.UseHttpsRedirection();
 app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
 {
 endpoints.MapRazorPages();
 });
 }
 }
}

Et dans le Program.cs en .NET 5.0 :

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
namespace MyApplication
{
 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>();
 });
 }
}

Et enfin le résultat en .NET 6.0 :

var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
 app.UseExceptionHandler(“/Error”);
 // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
 app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();

C’est quand même mieux non ? 😎

Normalement votre application devrait fonctionner comme auparavant et peut être même mieux au vu des améliorations de performance sur .NET 6.0.

Si besoin de plus d’informations , il existe un guide chez Microsoft qui vous aidera si vous avez des difficultés. Il est disponible ici.

Have fun coding !