Developpez.com

Le Club des Développeurs et IT Pro

Apprendre à migrer une application ASP.NET Core existante vers ASP.NET Core 2.0

Par Hinault Romaric

Le 26/08/2017, par Hinault Romaric, Responsable .NET
ASP.NET Core 2.0, la dernière évolution majeure de la jeune plateforme de développement Web est disponible en version stable depuis une dizaine de jours. Dans ce billet de blog, je vais présenter les modifications qu'il faut apporter à une application ASP.NET Core 1.x pour profiter des fonctionnalités de cette nouvelle version.


Mise à jour de la version du Framework

Pour migrer votre application sous ASP.NET Core 1.x vers ASP.NET Core 2.0, la première chose à faire sera d’éditer le fichier .csproj et modifier la version du Framework qui est utilisée.

La section suivante :

Code xml :
1
2
3
<PropertyGroup> 
<TargetFramework>netcoreapp1.1</TargetFramework> 
</PropertyGroup>

Doit être modifiée en :

Code xml :
1
2
3
<PropertyGroup> 
<TargetFramework>netcoreapp2.0</TargetFramework> 
</PropertyGroup>

Si vous ciblez le Full Framework .NET dans votre projet, vous devez modifier sa version pour utiliser une version supérieure ou égale à 4.6.1. Il est référencé dans la section TargetFramework. Vous allez désormais avoir ceci :

Code xml :
<TargetFramework>net461</TargetFramework>

Si vous utilisez Visual Studio, vous pouvez simplement aller dans les propriétés du projet, et cliquer sur la zone déroulante « Target Framework », puis choisir .NET Core 2.0.


Mise à jour des packages

Une fois cela fait, vous devez faire passer tous les packages ASP.NET Core (Microsoft.AspNetCore.xxx) qui sont référencés dans votre projet vers les nouvelles versions de ceux-ci. Vous pouvez également modifier les packages pour EntityFramework Core vers la version 2.0 qui a été publiée au même moment.

Pour mon application dont les packages suivants sont référencés :

Code xml :
1
2
3
4
5
6
7
8
9
<ItemGroup> 
<PackageReference Include="BuildBundlerMinifier" Version="2.4.337" /> 
<PackageReference Include="Microsoft.AspNetCore" Version="1.0.4" /> 
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.0.3" /> 
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.0.2" /> 
<PackageReference Include="Microsoft.EntityFrameworkCore.SQLite" Version="1.0.*" /> 
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.0.*" /> 
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools.Dotnet" Version="1.0.0" /> 
</ItemGroup>

Je vais obtenir le résultat suivant après mise à jour :

Code xml :
1
2
3
4
5
6
7
8
9
<ItemGroup> 
<PackageReference Include="BuildBundlerMinifier" Version="2.4.337" /> 
<PackageReference Include="Microsoft.AspNetCore" Version="2.0.0" /> 
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.0" /> 
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.0.0" /> 
<PackageReference Include="Microsoft.EntityFrameworkCore.SQLite" Version="2.0.0" /> 
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" /> 
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools.Dotnet" Version="2.0.0" /> 
</ItemGroup>

Vous pouvez migrer vos packages encore plus simplement, en remplaçant ceux-ci par une référence unique au metapackage Microsoft.AspNetCore.All comme suit :

Code xml :
1
2
3
4
  
<ItemGroup> 
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /> 
</ItemGroup>

Il s’agit d’une nouveauté de ASP.NET Core 2.0. Vous trouverez plus de détails dans mon billet de blog découverte du metapackage Microsoft.AspNetCore.All.

Mise à jour des outils .NET Core

Dans le fichier .csproj, il pourrait également exister une section dans laquelle sont référencés les outils CLI .NET Core. Ils sont notamment utilisés pour la génération de code ou par EntityFramework pour la génération des bases de données.

Code xml :
1
2
3
4
<ItemGroup> 
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" /> 
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0" /> 
</ItemGroup>

Vous devez également les modifier pour cibler .NET Core 2.0 :

Code xml :
1
2
3
4
<ItemGroup> 
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> 
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> 
</ItemGroup>

Autres modifications

Le fichier Program.cs a été refactorisé dans ASP.NET Core 2.0. Pour éviter les potentiels problèmes que pourrait causer le code de la version avec ASP.NET Core 1.x, je vous recommande de modifier le code de votre classe Program pour utiliser celui proposé avec ASP.NET Core 2.0.

Vous devez donc éditer votre fichier Program.cs, et remplacer le code suivant :
Code c# :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  
  
public class Program 
{ 
public static void Main(string[] args) 
{ 
var host = new WebHostBuilder() 
.UseKestrel() 
.UseContentRoot(Directory.GetCurrentDirectory()) 
.UseIISIntegration() 
.UseStartup<Startup>() 
.Build(); 
  
host.Run(); 
} 
}

Par :

Code c# :
1
2
3
4
5
6
7
8
9
10
11
12
public class Program 
{ 
public static void Main(string[] args) 
{ 
BuildWebHost(args).Run(); 
} 
  
public static IWebHost BuildWebHost(string[] args) => 
WebHost.CreateDefaultBuilder(args) 
.UseStartup<Startup>() 
.Build(); 
}


Si dans votre fichier .csproj, vous avez la section PackageTargetFallBack :

Code xml :
<PackageTargetFallback>portable-net45+win8</PackageTargetFallback>

Elle doit être renommée en AssertTargetFallback :

Code xml :
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>

Après toutes ces modifications, si vous exécutez votre application, elle devra désormais utiliser ASP.NET Core 2.0.
  Billet blog