web-dev-qa-db-fra.com

Comment utiliser IApplicationBuilder et IServiceCollection lors de la mise à niveau de .NET Core 2.1 vers .NET 4.7.1?

J'ai dû changer mon projet de .NET Core 2.1 en .NET 4.7.1 et j'ai corrigé presque toutes les erreurs sauf les suivantes qui m'échappent encore

  • 'IApplicationBuilder' ne contient pas de définition pour 'UseHsts' et aucune méthode d'extension 'UseHsts' acceptant un premier argument de type 'IApplicationBuilder' n'a pu être trouvée (vous manque une directive using ou une référence d'assembly?)

  • 'IApplicationBuilder' ne contient pas de définition pour 'UseAuthentication' et aucune méthode d'extension 'UseAuthentication' acceptant un premier argument de type 'IApplicationBuilder' n'a pu être trouvée (il vous manque une directive using ou une référence d'assembly?)

  • 'IApplicationBuilder' ne contient pas de définition pour 'UseCookiePolicy' et aucune méthode d'extension 'UseCookiePolicy' acceptant un premier argument de type 'IApplicationBuilder' n'a pu être trouvée (vous manque une directive using ou une référence d'assembly?)

  • 'IApplicationBuilder' ne contient pas de définition pour 'UseHttpsRedirection' et aucune méthode d'extension 'UseHttpsRedirection' acceptant un premier argument de type 'IApplicationBuilder' n'a pu être trouvée (vous manque une directive using ou une référence d'assembly?)

  • 'IApplicationBuilder' ne contient pas de définition pour 'UseSession' et aucune méthode d'extension 'UseSession' acceptant un premier argument de type 'IApplicationBuilder' n'a pu être trouvée (vous manque une directive using ou une référence d'assembly?)

  • 'IApplicationBuilder' ne contient pas de définition pour 'UseStaticFiles' et aucune méthode d'extension 'UseStaticFiles' acceptant un premier argument de type 'IApplicationBuilder' n'a pu être trouvée (vous manque une directive using ou une référence d'assembly?)

  • 'IServiceCollection' ne contient pas de définition pour 'AddAuthentication' et aucune méthode d'extension 'AddAuthentication' acceptant un premier argument de type 'IServiceCollection' n'a pu être trouvée (vous manque une directive using ou une référence d'assembly?)

  • 'IServiceCollection' ne contient pas de définition pour 'AddSession' et aucune méthode d'extension 'AddSession' acceptant un premier argument de type 'IServiceCollection' n'a pu être trouvée (vous manque une directive using ou une référence d'assembly?)

J'utilise Microsoft.AspNetCore.Builder et Microsoft.Extensions.DependencyInjection. De quoi d'autre ai-je besoin pour utiliser/installer/ajouter pour que IApplicationBuilder et IServiceCollection fonctionnent?

Dans mon fichier WebApi.csproj, j'ai changé le cadre cible de netcoreapp2.1 à net471.

Vieux:

<PropertyGroup>
  <TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>

Nouveau:

<PropertyGroup>
  <TargetFramework>net471</TargetFramework>
</PropertyGroup>
10
Friso

Suite à la réponse de Rik, j'ai cherché d'autres packages et j'ai découvert que je devais ajouter tous les packages NuGet suivants:

  • Microsoft.AspNetCore.Authentication
  • Microsoft.AspNetCore.Session
  • Microsoft.AspNetCore.HttpsPolicy
  • Microsoft.AspNetCore.CookiePolicy
  • Microsoft.AspNetCore.StaticFiles

Après cela, je n'ai plus reçu de messages d'erreur.

20
Friso

Les erreurs "AddSession" et "UseAuthentication" peuvent être corrigées à l'aide des packages de nuget suivants.

  • Microsoft.AspNetCore.Session
  • Microsoft.AspNetCore.Authentication
8
Rik

Tout d'abord, le passage à 4.7.1 n'est pas une rétrogradation, il passe à une plate-forme différente. Quelque chose que vous probablement n'avez pas besoin de faire, sauf si vous voulez réutiliser le code pour une application Winforms ou WPF.

Les packages Microsoft.Extensions. * Ciblent .NET Standard 2.0, pas seulement Core, vous pouvez donc également les utiliser dans le cadre complet.

Les packages et les classes ne sont pas non plus liés à ASP.NET, à l'exception de l'hébergement. Je les utilise dans des applications console.

Cela signifie également que si vos bibliothèques de classes ciblent .NET Standard 2.0, elles peuvent être utilisées par les deux plates-formes sans modifier la cible. Vous pouvez peut-être déplacer la plupart du code vers les bibliothèques .NET Standard 2.0 et laisser uniquement la configuration aux projets spécifiques à l'exécution

Vous n'avez pas strictement besoin d'un hébergement pour utiliser toutes les autres extensions, bien qu'il fournisse une API pratique similaire au code ASP.NET Core. Vous pouvez écrire votre propre classe de démarrage avec les méthodes Configure etc et les appeler explicitement. En fin de compte, ce dont vous avez besoin est d'accéder à IServiceCollection afin que vous puissiez obtenir des services configurés et les exécuter.

Vous pouvez ajouter un hôte .NET générique en utilisant le package Microsoft.Exceptions.Hosting . Outre l'API commune, il ajoute la possibilité d'héberger des services de longue durée à des projets non ASP.NET Core.

Ce billet de blog montre comment vous pouvez utiliser le package d'hébergement pour créer une application console qui démarre un service de longue durée, similaire à un service ou un démon Windows, par exemple:

public static async Task Main(string[] args)
{
    var hostBuilder = new HostBuilder()
        .ConfigureServices((hostContext, services) =>
        {
            services.AddSingleton<IBusControl>(serviceProvider =>
            {
                return MassTransit.Bus.Factory.CreateUsingRabbitMq(cfg =>
                {
                    var Host = cfg.Host(new Uri("rabbitmq://localhost"), h =>
                    {
                        h.Username("guest");
                        h.Password("guest");
                    });
                });
            });
            services.AddScoped<IHostedService, MassTransitHostedService>();
        });

    await hostBuilder.RunConsoleAsync();
}

. NET Generic Host va plus en détail et montre plus d'exemples de journalisation, DI, configuration, etc.

[~ # ~] mise à jour [~ # ~]

ASP.NET Core n'est pas lié à .NET Core. Vous pouvez également l'utiliser dans des projets Full Framework, simplement en modifiant le temps d'exécution cible dans la boîte de dialogue Création de projet

2
Panagiotis Kanavos