Événement
Championnats du monde Power BI DataViz
14 févr., 16 h - 31 mars, 16 h
Avec 4 chances d’entrer, vous pourriez gagner un package de conférence et le rendre à la Live Grand Finale à Las Vegas
En savoir plusCe navigateur n’est plus pris en charge.
Effectuez une mise à niveau vers Microsoft Edge pour tirer parti des dernières fonctionnalités, des mises à jour de sécurité et du support technique.
Par Rick Anderson
Consultez Nouveautés d’ASP .NET Core 2.1 pour obtenir une vue d’ensemble des nouvelles fonctionnalités dans ASP .NET Core 2.1.
Cet article :
Un moyen rapide d’obtenir une vue d’ensemble des modifications apportées à la version 2.1 consiste à :
Cet article fournit une vue d’ensemble de la migration vers ASP.NET Core 2.1. Il ne contient pas la liste complète de toutes les modifications nécessaires à la migration vers la version 2.1. Certains projets peuvent nécessiter davantage d’étapes en fonction des options sélectionnées lors de la création du projet et des modifications apportées au projet.
Mettez à jour le fichier projet :
<TargetFramework>netcoreapp2.1</TargetFramework>
.Microsoft.AspNetCore.All
par une référence de package pour Microsoft.AspNetCore.App
. Vous devrez peut-être ajouter des dépendances qui ont été supprimées de Microsoft.AspNetCore.All
. Pour plus d’informations, consultez Métapaquet Microsoft.AspNetCore.All pour ASP.NET Core 2.0 et Métapaquet Microsoft.AspNetCore.App pour ASP.NET Core.Microsoft.AspNetCore.App
. Les projets qui utilisent <Project Sdk="Microsoft.NET.Sdk.Web">
n’ont pas besoin de définir la version. La version est impliquée par la version cible et sélectionnée pour correspondre au mieux à la façon dont ASP.NET Core 2.1 fonctionne. Pour plus d’informations, consultez la section Règles pour les projets ciblant l’infrastructure partagée.dotnet watch
)dotnet ef
)dotnet sql-cache
)dotnet user-secrets
)Microsoft.VisualStudio.Web.CodeGeneration.Tools
. Vous pouvez remplacer cet outil par une version mondialement installée en exécutant dotnet tool install -g dotnet-aspnet-codegenerator
.<CopyRefAssembliesToPublishDirectory>true</CopyRefAssembliesToPublishDirectory>
à un <PropertyGroup>
dans votre fichier projet.Le balisage suivant montre le fichier projet 2.0 généré par le modèle :
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<UserSecretsId>aspnet-{Project Name}-{GUID}</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.3" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.4" PrivateAssets="All" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3" />
<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.2" />
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />
</ItemGroup>
</Project>
Le balisage suivant montre le fichier projet 2.1 généré par le modèle :
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<UserSecretsId>aspnet-{Project Name}-{GUID}</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.1" PrivateAssets="All" />
</ItemGroup>
</Project>
Un framework partagé est un ensemble d’assemblys (fichiers.dll) qui ne sont pas dans les dossiers de l’application. Le framework partagé doit être installé sur l’ordinateur pour exécuter l’application. Pour plus d’informations, consultez Le framework partagé.
ASP.NET Core 2.1 inclut les infrastructures partagées suivantes :
La version spécifiée par la référence de package est la version minimale requise. Par exemple, un projet référençant les versions 2.1.1 de ces packages ne s’exécute pas sur une machine avec uniquement le runtime 2.1.0 installé.
Problèmes connus pour les projets ciblant une infrastructure partagée :
Le kit SDK .NET Core 2.1.300 (d’abord inclus dans Visual Studio 15.6) a défini la version implicite de Microsoft.AspNetCore.App
sur 2.1.0, ce qui a provoqué des conflits avec Entity Framework Core 2.1.1. La solution recommandée consiste à mettre à niveau le kit SDK .NET Core vers la version 2.1.301 ou ultérieure. Pour plus d’informations, consultez Les packages qui partagent des dépendances avec Microsoft.AspNetCore.App ne peuvent pas référencer les versions de correctif.
Tous les projets qui doivent utiliser Microsoft.AspNetCore.All
ou Microsoft.AspNetCore.App
doivent ajouter une référence de package pour le package dans le fichier projet, même s’ils contiennent une référence de projet à un autre projet à l’aide de Microsoft.AspNetCore.All
ou Microsoft.AspNetCore.App
.
Exemple :
MyApp
a une référence de package à Microsoft.AspNetCore.App
.MyApp.Tests
a une référence de projet à MyApp.csproj
.Ajoutez une référence de package pour Microsoft.AspNetCore.App
à MyApp.Tests
. Pour plus d’informations, consultez Les tests d’intégration sont difficiles à configurer et peuvent s’interrompre sur la maintenance de l’infrastructure partagée.
Dans ASP.NET Core 2.1, les images Docker ont migré vers le référentiel GitHub dotnet/dotnet-docker. Le tableau suivant montre les modifications apportées à l’image Docker et aux balises :
2.0 | 2.1 |
---|---|
microsoft/aspnetcore:2.0 | microsoft/dotnet:2.1-aspnetcore-runtime |
microsoft/aspnetcore-build:2.0 | microsoft/dotnet:2.1-sdk |
Modifiez les lignes FROM
de votre Dockerfile pour utiliser les nouveaux noms d'image et balises dans la colonne 2.1 du tableau précédent. Pour plus d’informations, consultez Migration d’aspnetcore docker repos vers dotnet.
Les images suivantes montrent les modifications apportées au fichier Program.cs
généré par un modèle.
L’image précédente montre la version 2.0 avec les suppressions en rouge.
L’illustration suivante montre le code de la version 2.1. Le code en vert a remplacé celui de la version 2.0 :
Le code suivant montre la version 2.1 de Program.cs
:
namespace WebApp1
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
}
Le nouveau Main
remplace l’appel à BuildWebHost
par CreateWebHostBuilder. IWebHostBuilder a été ajouté pour prendre en charge une nouvelle infrastructure de test d’intégration.
Le code suivant montre les modifications apportées au code généré par le modèle 2.1. Toutes les modifications sont du code nouvellement ajouté, à l’exception de UseBrowserLink
, qui a été supprimé :
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace WebApp1
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
// If the app uses Session or TempData based on Session:
// app.UseSession();
app.UseMvc();
}
}
}
Les modifications de code précédentes sont détaillées dans :
CookiePolicyOptions
et UseCookiePolicy
.UseHsts
.UseHttpsRedirection
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.ASP.NET Core 2.1 fournit ASP.NET Core Identity en tant que bibliothèque de classes (RCL) Razor.
L’interface utilisateur Identity 2.1 par défaut ne fournit pas de nouvelles fonctionnalités significatives par rapport à la version 2.0. Le remplacement d’Identity par le package RCL est facultatif. Les avantages du remplacement du code d’Identity généré par le modèle par la version RCL sont les suivants :
Microsoft.AspNetCore.App
est mis à jour.Si vous avez apporté des modifications non triviales au code d’Identity généré par le modèle :
Identity 2.1 expose les points de terminaison avec la zone d’Identity
. Par exemple, le tableau suivant présente des exemples de points de terminaison d’Identity qui passent de 2.0 à 2.1 :
URL 2.0 | URL 2.1 |
---|---|
/Account/Login | /Identity/Account/Login |
/Account/Logout | /Identity/Account/Logout |
/Account/Manage | /Identity/Account/Manage |
Les applications qui ont du code utilisant Identity et remplacent l’interface utilisateur d’Identity 2.0 par la bibliothèque d’Identity 2.1 doivent prendre en compte que les URL d’Identity ont le segment /Identity
ajouté aux URI. Une façon de gérer les nouveaux points de terminaison d’Identityconsiste à configurer des redirections, par exemple de /Account/Login
vers /Identity/Account/Login
.
Les options suivantes sont disponibles pour mettre à jour Identity vers la version 2.1.
Cette section décrit les étapes à suivre pour remplacer le code d’Identity généré par le modèle ASP.NET Core 2.0 par la bibliothèque de classes Razor Identity d’ASP.NET Core. Les étapes suivantes concernent un projet Razor Pages, mais l’approche est similaire pour un projet MVC.
Supprimez la classe dérivée IdentityDbContext
générée automatiquement par le générateur de modèles d’Identity dans le dossier Areas/Identity/Data/.
Supprimez Areas/Identity/IdentityHostingStartup.cs
.
Mettez à jour le fichier _LoginPartial.cshtml :
asp-area="Identity"
au formulaire et aux liens d’ancrage.<form />
vers <form asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Page("/Index", new { area = "" })" method="post" id="logoutForm" class="navbar-right">
.Le code suivant montre le fichier _LoginPartial.cshtml mis à jour :
@using Microsoft.AspNetCore.Identity
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager
@if (SignInManager.IsSignedIn(User))
{
<form asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Page("/Index", new { area = "" })" method="post" id="logoutForm" class="navbar-right">
<ul class="nav navbar-nav navbar-right">
<li>
<a asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
</li>
<li>
<button type="submit" class="btn btn-link navbar-btn navbar-link">Log out</button>
</li>
</ul>
</form>
}
else
{
<ul class="nav navbar-nav navbar-right">
<li><a asp-area="Identity" asp-page="/Account/Register">Register</a></li>
<li><a asp-area="Identity" asp-page="/Account/Login">Log in</a></li>
</ul>
}
Mettez à jour ConfigureServices
à l’aide du code suivant :
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<ApplicationUser>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc();
// Register no-op EmailSender used by account confirmation and password reset
// during development
services.AddSingleton<IEmailSender, EmailSender>();
}
Déplacer Pages/_Layout.cshtml vers Pages/Shared/_Layout.cshtml
Dans Areas/Identity/Pages/_ViewStart.cshtml, remplacez Layout = "/Pages/_Layout.cshtml"
par Layout = "/Pages/Shared/_Layout.cshtml"
.
Le fichier _Layout.cshtml présente les modifications suivantes :
<partial name="_CookieConsentPartial" />
est ajouté. Pour plus d’informations, consultez Prise en charge du RGPD dans ASP.NET Core.Les fichiers suivants sont ajoutés :
Privacy.cshtml
Privacy.cshtml.cs
Consultez Prise en charge du RGPD dans ASP.NET Core pour obtenir plus d’informations sur les fichiers précédents.
Le fichier Layout.cshtml
présente les modifications suivantes :
<partial name="_CookieConsentPartial" />
est ajouté.jquery.validate/1.14.0 devient jquery.validate/1.17.0
Les éléments suivants sont ajoutés :
Views/Home/Privacy.cshtml
Privacy
est ajoutée au contrôleur Home.Consultez Prise en charge du RGPD dans ASP.NET Core pour obtenir plus d’informations sur les fichiers précédents.
Comme les applications ASP.NET Core utilisent désormais HTTPS par défaut, le fichier Properties/launchSettings.json
a changé.
Le fichier JSON suivant montre le fichier launchSettings.json
précédent généré par le modèle 2.0 :
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:1799/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"WebApp1": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:1798/"
}
}
}
Le fichier JSON suivant montre le nouveau fichier launchSettings.json
généré par le modèle 2.1 :
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:39191",
"sslPort": 44390
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"WebApp1": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
Pour plus d’informations, consultez Appliquer HTTPS dans ASP.NET Core.
FileResult ne traite plus l’en-tête Accept-Ranges par défaut. Pour activer l’en-tête Accept-Ranges
, définissez EnableRangeProcessing sur true
.
Les méthodes ControllerBase suivantes ne traitent plus l’en-tête Accept-Ranges par défaut :
Pour activer l’en-tête Accept-Ranges
, définissez le paramètre EnableRangeProcessing
sur true
.
Si le module ASP.NET Core (ANCM) n'était pas un composant sélectionné lors de l'installation de Visual Studio ou si une version antérieure de l'ANCM était installée sur le système, téléchargez le dernier programme d'installation du pack .NET Core Hosting (téléchargement direct) et exécutez l'installateur. Pour plus d'informations, consultez Pack d'hébergement.
Commentaires sur ASP.NET Core
ASP.NET Core est un projet open source. Sélectionnez un lien pour fournir des commentaires :
Événement
Championnats du monde Power BI DataViz
14 févr., 16 h - 31 mars, 16 h
Avec 4 chances d’entrer, vous pourriez gagner un package de conférence et le rendre à la Live Grand Finale à Las Vegas
En savoir plus