web-dev-qa-db-ja.com

.NET Core 2.1から.NET 4.7.1にダウングレードするときにIApplicationBuilderとIServiceCollectionを使用する方法

プロジェクトを.NET Core 2.1から.NET 4.7.1に変更する必要があり、以下を除くほとんどすべてのエラーを修正しました。

  • 「IApplicationBuilder」には「UseHsts」の定義が含まれておらず、タイプ「IApplicationBuilder」の最初の引数を受け入れる拡張メソッド「UseHsts」が見つかりません(usingディレクティブまたはAssembly参照がありませんか?)

  • 「IApplicationBuilder」には「UseAuthentication」の定義が含まれておらず、「IApplicationBuilder」タイプの最初の引数を受け入れる拡張メソッド「UseAuthentication」が見つかりませんでした(usingディレクティブまたはAssembly参照がありませんか?)

  • 「IApplicationBuilder」には「UseCookiePolicy」の定義が含まれておらず、タイプ「IApplicationBuilder」の最初の引数を受け入れる拡張メソッド「UseCookiePolicy」が見つかりません(usingディレクティブまたはAssembly参照がありませんか?)

  • 「IApplicationBuilder」には「UseHttpsRedirection」の定義が含まれておらず、タイプ「IApplicationBuilder」の最初の引数を受け入れる拡張メソッド「UseHttpsRedirection」が見つかりません(usingディレクティブまたはAssembly参照がありませんか?)

  • 「IApplicationBuilder」には「UseSession」の定義が含まれておらず、タイプ「IApplicationBuilder」の最初の引数を受け入れる拡張メソッド「UseSession」が見つかりません(usingディレクティブまたはAssembly参照がありませんか?)

  • 「IApplicationBuilder」には「UseStaticFiles」の定義が含まれておらず、タイプ「IApplicationBuilder」の最初の引数を受け入れる拡張メソッド「UseStaticFiles」が見つかりません(usingディレクティブまたはAssembly参照がありませんか?)

  • 「IServiceCollection」には「AddAuthentication」の定義が含まれておらず、タイプ「IServiceCollection」の最初の引数を受け入れる拡張メソッド「AddAuthentication」が見つかりませんでした(usingディレクティブまたはAssembly参照がありませんか?)

  • 「IServiceCollection」には「AddSession」の定義が含まれておらず、タイプ「IServiceCollection」の最初の引数を受け入れる拡張メソッド「AddSession」が見つかりませんでした(usingディレクティブまたはAssembly参照がありませんか?)

使っています Microsoft.AspNetCore.BuilderおよびMicrosoft.Extensions.DependencyInjectionIApplicationBuilderIServiceCollectionを機能させるには、他に何を使用/インストール/追加する必要がありますか?

WebApi.csprojファイルで、ターゲットフレームワークをnetcoreapp2.1からnet471に変更しました。

古い:

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

新しい:

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

Rikの回答に続いて、さらにパッケージを検索しましたが、次のNuGetパッケージをすべて追加する必要があることがわかりました。

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

その後、エラーメッセージは表示されなくなりました。

20
Friso

「AddSession」および「UseAuthentication」エラーは、次のnugetパッケージを使用して修正できます。

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

まず、4.7.1への切り替えはダウングレードではなく、別のプラットフォームに移行しています。 WinformsまたはWPFアプリケーションでコードを再利用する場合を除き、おそらく必要なことは必要ありません。

Microsoft.Extensions。*パッケージは、Coreだけでなく.NET Standard 2.0を対象としているため、Fullフレームワークでも使用できます。

パッケージとクラスは、ホスティングを除き、ASP.NETにも関連付けられていません。コンソールアプリケーションで使用しています。

また、クラスライブラリが.NET Standard 2.0をターゲットにしている場合、ターゲットを変更せずに両方のプラットフォームで使用できることも意味します。おそらく、ほとんどのコードを.NET Standard 2.0ライブラリに移動し、構成のみをランタイム固有のプロジェクトに残すことができます。

ASP.NET Coreコードと同様の便利なAPIを提供しますが、他のすべての拡張機能を使用するためにホスティングを厳密に行う必要はありません。 Configureなどのメソッドを使用して独自のStartupクラスを記述し、明示的に呼び出すことができます。最後に、必要なのはIServiceCollectionへのアクセスであり、構成されたサービスを取得して実行できます。

Microsoft.Exceptions.Hosting パッケージを使用して generic .NET Host を追加できます。共通のAPIとは別に、長時間実行されるサービスを非ASP.NET Coreプロジェクトにホストする機能を追加します。

このブログ投稿 Hostingパッケージを使用して、Windowsサービスやデーモンに似た長時間実行されるサービスを開始するコンソールアプリケーションを作成する方法を示します。例:

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 の詳細を説明し、ロギング、DI、構成などの例を示します。

[〜#〜] update [〜#〜]

ASP.NET Coreは.NET Coreに関連付けられていません。プロジェクト作成ダイアログでターゲットランタイムを変更するだけで、フルフレームワークプロジェクトでも使用できます

2