【C#】コンソールアプリでHostBuilderを使う

ASP.NET 系のテンプレートで作成すると何も考えずとも汎用ホスト(=Generic Host) が使用可能、つまり、HostBuilder が利用可能な状態から始まりますが、コンソールアプリから始めると何も存在しないため HostBuilder が宣言しても見つからないため意外とどうしたらいいのかわからない状態になったのでセットアップ方法の紹介です。

以下内容は、プロジェクトを再作成したほうがどう考えても効率的なのでど、うしてもコンソールアプリで CreateHostBuilder Run したい人向けです。

確認環境

  • VisualStudio 2019 + .NET 5
  • Windows 10

NuGetで機能を追加

パッケージマネージャーコンソールで以下コマンドを打ちます。

// メニュー
ツール > NuGet パッケージ マネージャー > パッケージ マネージャー コンソール

// コマンド
// NuGet:https://www.nuget.org/packages/Microsoft.Extensions.Hosting
> Install-Package Microsoft.Extensions.Hosting -Version 6.0.1

HostBuilderを利用する

これで以下のように CreateHostBuilder から始まる実装が使えるようになります。

// Program.cs

using Microsoft.Extensions.Hosting;

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                // 必要な初期化を記述する
            });
}

ただ、プロジェクトのフレームワークに「Microsoft.AspNetCore.App」のパッケージが入ってないところで Microsoft.Extensions.Hosting を追加しちゃうと以下のようにバイナリが大量に出力されるためやっぱり後から入れるのは微妙かもしれませんね。

// ずらぁ~、、、
Root/
│  ConsoleApp1.deps.json
│  ConsoleApp1.dll
│  ConsoleApp1.exe
│  ConsoleApp1.pdb
│  ConsoleApp1.runtimeconfig.dev.json
│  ConsoleApp1.runtimeconfig.json
│  Microsoft.Extensions.Configuration.Abstractions.dll
│  Microsoft.Extensions.Configuration.Binder.dll
│  Microsoft.Extensions.Configuration.CommandLine.dll
│  Microsoft.Extensions.Configuration.dll
│  Microsoft.Extensions.Configuration.EnvironmentVariables.dll
│  Microsoft.Extensions.Configuration.FileExtensions.dll
│  Microsoft.Extensions.Configuration.Json.dll
│  Microsoft.Extensions.Configuration.UserSecrets.dll
│  Microsoft.Extensions.DependencyInjection.Abstractions.dll
│  Microsoft.Extensions.DependencyInjection.dll
│  Microsoft.Extensions.FileProviders.Abstractions.dll
│  Microsoft.Extensions.FileProviders.Physical.dll
│  Microsoft.Extensions.FileSystemGlobbing.dll
│  Microsoft.Extensions.Hosting.Abstractions.dll
│  Microsoft.Extensions.Hosting.dll
│  Microsoft.Extensions.Logging.Abstractions.dll
│  Microsoft.Extensions.Logging.Configuration.dll
│  Microsoft.Extensions.Logging.Console.dll
│  Microsoft.Extensions.Logging.Debug.dll
│  Microsoft.Extensions.Logging.dll
│  Microsoft.Extensions.Logging.EventLog.dll
│  Microsoft.Extensions.Logging.EventSource.dll
│  Microsoft.Extensions.Options.ConfigurationExtensions.dll
│  Microsoft.Extensions.Options.dll
│  Microsoft.Extensions.Primitives.dll
│  System.Diagnostics.DiagnosticSource.dll
│  System.Diagnostics.EventLog.dll
│  System.Runtime.CompilerServices.Unsafe.dll
│  System.Text.Encodings.Web.dll
│  System.Text.Json.dll
│
├─ref
│      ConsoleApp1.dll
│
└─runtimes
    └─win
        └─lib
            └─netcoreapp3.1
                    System.Diagnostics.EventLog.dll
                    System.Diagnostics.EventLog.Messages.dll