web-dev-qa-db-fra.com

Qu'est-ce que SetCompatibilityVersion dans la classe de démarrage du projet principal de l'API Web asp.net

À l'aide de Visual Studio 2017, je viens de créer un projet d'API simple, comme indiqué ci-dessous. Et dans le fichier Startup.cs j'ai ce code.

public void ConfigureServices(IServiceCollection services) {

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

}

Quelqu'un peut-il nous éclairer sur ce que cela signifie? Avons-nous besoin de conserver ce code?

Je pense que MS devrait mettre quelques commentaires pour indiquer ce que fait un tel code.

SetCompatibilityVersion

10
VivekDev

Lorsque vous appelez la méthode AddMvc, plusieurs composants sont enregistrés avec certaines options. Vous appelez une méthode et l'ensemble du framework mvc est câblé.

Cependant, si l'équipe mvc décide à l'avenir de modifier une valeur par défaut, ou décide qu'un composant ne doit plus être enregistré par défaut, ou modifie un effet secondaire attendu de cette méthode, le code utilisateur reposant sur cela se briserait. Pour éviter une telle rupture, vous pouvez appeler la méthode de compatibilité définie que l'équipe mvc utilisera pour préserver le comportement qui vous est fourni.

Supposons qu'ils introduisent une nouvelle fonctionnalité, qui n'existe que lorsque vous ciblez la plateforme 2.3: si votre code déclare qu'il cible l'api 2.2, l'équipe mvc saura que vous n'utilisez pas cette fonctionnalité car elle n'existait pas à ce moment-là. De cette façon, le peut faire des hypothèses sûres sur ce qui doit être fourni et comment.

Pour plus de détails, veuillez consulter MSDN .

16
Yennefer

La réponse de Yennefer est excellente, je vais juste ajouter quelques choses.

  • Pour ASP.NET Core 2.X, il pourrait très bien être nécessaire d'utiliser SetCompatibilityVersion, pour les raisons décrites par Yennefer.

  • Pour ASP.NET Core 3.0, c'est un no-op, ce qui signifie qu'il ne fait absolument rien. En savoir plus ici .

  • Pour ASP.NET Core 3.X (mais pas 3.0) et les versions ultérieures, il peut avoir une valeur. En savoir plus ici

2
Jim Aho