Windows サービスでの ASP.NET Core のホストHost ASP.NET Core in a Windows Service

著者: Luke LathamTom DykstraBy Luke Latham and Tom Dykstra

ASP.NET Core アプリは、IIS を 使用せずに、Windows サービスとして Windows にホストできます。An ASP.NET Core app can be hosted on Windows as a Windows Service without using IIS. Windows サービスとしてホストされている場合、サーバーの再起動後にアプリが自動的に起動します。When hosted as a Windows Service, the app automatically starts after server reboots.

サンプル コードを表示またはダウンロードします (ダウンロード方法)。View or download sample code (how to download)

必須コンポーネントPrerequisites

ワーカー サービス テンプレートWorker Service template

ASP.NET Core ワーカー サービス テンプレートは、実行時間が長いサービス アプリを作成する場合の出発点として利用できます。The ASP.NET Core Worker Service template provides a starting point for writing long running service apps. テンプレートを Windows サービス アプリの基礎として使用するには:To use the template as a basis for a Windows Service app:

  1. .NET Core テンプレートからワーカー サービス アプリを作成します。Create a Worker Service app from the .NET Core template.
  2. アプリの構成」セクションのガイダンスに従って、Windows サービスとして実行できるようにワーカー サービス アプリを更新します。Follow the guidance in the App configuration section to update the Worker Service app so that it can run as a Windows Service.
  1. 新しいプロジェクトを作成します。Create a new project.
  2. [ASP.NET Core Web アプリケーション] を選択します。Select ASP.NET Core Web Application. [次へ] を選択します。Select Next.
  3. [プロジェクト名] フィールドにプロジェクト名を入力するか、既定のプロジェクト名をそのまま使用します。Provide a project name in the Project name field or accept the default project name. [作成] を選択します。Select Create.
  4. [新しい ASP.NET Core Web アプリケーションを作成する] ダイアログで、 [.NET Core][ASP.NET Core 3.0] が選択されていることを確認します。In the Create a new ASP.NET Core Web Application dialog, confirm that .NET Core and ASP.NET Core 3.0 are selected.
  5. [ワーカー サービス] テンプレートを選択します。Select the Worker Service template. [作成] を選択します。Select Create.

アプリの構成App configuration

Microsoft.Extensions.Hosting.WindowsServices パッケージによって提供される IHostBuilder.UseWindowsService は、ホストのビルド時に呼び出されます。IHostBuilder.UseWindowsService, provided by the Microsoft.Extensions.Hosting.WindowsServices package, is called when building the host. アプリが Windows サービスとして実行している場合、メソッドはIf the app is running as a Windows Service, the method:

  • ホストの有効期間を WindowsServiceLifetime に設定します。Sets the host lifetime to WindowsServiceLifetime.
  • コンテンツのルートを設定します。Sets the content root.
  • 既定のソース名として、アプリケーション名によるイベント ログへの記録を有効にします。Enables logging to the event log with the application name as the default source name.
    • appsettings.Production.json ファイルで Logging:LogLevel:Default キーを使用してログ レベルを構成できます。The log level can be configured using the Logging:LogLevel:Default key in the appsettings.Production.json file.
    • 管理者のみが新しいイベント ソースを作成できます。Only administrators can create new event sources. アプリケーション名を使用して、イベント ソースを作成できない場合、警告がアプリケーション ソースに記録され、イベント ログが無効になります。When an event source can't be created using the application name, a warning is logged to the Application source and event logs are disabled.
public class Program
{
    public static async Task Main(string[] args)
    {
        await CreateHostBuilder(args).Build().RunAsync();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseWindowsService()
            .ConfigureAppConfiguration((context, config) =>
            {
                // Configure the app here.
            })
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<ServiceA>();
                services.AddHostedService<ServiceB>();
            })
            // Only required if the service responds to requests.
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

アプリでは、Microsoft.AspNetCore.Hosting.WindowsServicesMicrosoft.Extensions.Logging.EventLog へのパッケージ参照が必要です。The app requires package references for Microsoft.AspNetCore.Hosting.WindowsServices and Microsoft.Extensions.Logging.EventLog.

サービスの外部で実行しているときにテストとデバッグを行うには、アプリがサービスとして実行しているかコンソール アプリとして実行しているかを判別するコードを追加します。To test and debug when running outside of a service, add code to determine if the app is running as a service or a console app. デバッガーがアタッチされているか、--console スイッチが存在するかを検査します。Inspect if the debugger is attached or a --console switch is present. いずれかの条件が満たされる場合 (アプリがサービスとして実行していない場合)、Run を呼び出します。If either condition is true (the app isn't run as a service), call Run. 条件が満たされない場合 (アプリがサービスとして実行している場合):If the conditions are false (the app is run as a service):

コマンドライン構成プロバイダーでは、コマンドライン引数に名前と値の組が必要であるため、CreateDefaultBuilder が引数を受け取る前に --console スイッチは引数から削除されます。Because the Command-line Configuration Provider requires name-value pairs for command-line arguments, the --console switch is removed from the arguments before CreateDefaultBuilder receives the arguments.

Windows イベント ログに書き込むには、EventLog プロバイダーを ConfigureLogging に追加します。To write to the Windows Event Log, add the EventLog provider to ConfigureLogging. appsettings.Production.json ファイルで Logging:LogLevel:Default キーを使用してログ レベルを設定します。Set the logging level with the Logging:LogLevel:Default key in the appsettings.Production.json file.

サンプル アプリの次の例では、アプリ内で有効期間イベントを処理するために、RunAsService の代わりに RunAsCustomService を呼び出しています。In the following example from the sample app, RunAsCustomService is called instead of RunAsService in order to handle lifetime events within the app. 詳しくは、「イベントの開始と停止を扱う」セクションをご覧ください。For more information, see the Handle starting and stopping events section.

public class Program
{
    public static void Main(string[] args)
    {
        var isService = !(Debugger.IsAttached || args.Contains("--console"));
        
        if (isService)
        {
            var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
            var pathToContentRoot = Path.GetDirectoryName(pathToExe);
            Directory.SetCurrentDirectory(pathToContentRoot);
        }

        var builder = CreateWebHostBuilder(
            args.Where(arg => arg != "--console").ToArray());

        var host = builder.Build();

        if (isService)
        {
            // To run the app without the CustomWebHostService change the
            // next line to host.RunAsService();
            host.RunAsCustomService();
        }
        else
        {
            host.Run();
        }
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureLogging((hostingContext, logging) =>
            {
                logging.AddEventLog();
            })
            .ConfigureAppConfiguration((context, config) =>
            {
                // Configure the app here.
            })
            .UseStartup<Startup>();
}

配置の種類Deployment type

展開のシナリオに関する情報および注意事項については、「.NET Core アプリケーションの展開」をご覧ください。For information and advice on deployment scenarios, see .NET Core application deployment.

フレームワーク依存型展開 (FDD)Framework-dependent deployment (FDD)

フレームワーク依存型展開 (FDD) は、ターゲット システムに .NET Core のシステム全体の共有バージョンが存在することに依存します。Framework-dependent deployment (FDD) relies on the presence of a shared system-wide version of .NET Core on the target system. この記事のガイダンスに従って、FDD シナリオを採用すると、フレームワーク依存型実行可能ファイル と呼ばれる実行可能ファイル ( .exe) が SDK によって生成されます。When the FDD scenario is adopted following the guidance in this article, the SDK produces an executable (.exe), called a framework-dependent executable.

プロジェクト ファイルに次のプロパティ要素を追加します。Add the following property elements to the project file:

  • <OutputType> – アプリの出力の種類 (実行可能ファイルの場合 Exe)。<OutputType> – The app's output type (Exe for executable).
  • <LangVersion> – C# 言語バージョン (latest または preview)。<LangVersion> – The C# language version (latest or preview).

web.config ファイル (通常 ASP.NET Core アプリを発行する際に生成されます) は、Windows サービス アプリに対しては必要ありません。A web.config file, which is normally produced when publishing an ASP.NET Core app, is unnecessary for a Windows Services app. web.config ファイルの作成を無効にするには、true に設定した <IsTransformWebConfigDisabled> プロパティを追加します。To disable the creation of the web.config file, add the <IsTransformWebConfigDisabled> property set to true.

<PropertyGroup>
  <TargetFramework>netcoreapp3.0</TargetFramework>
  <OutputType>Exe</OutputType>
  <LangVersion>preview</LangVersion>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Windows ランタイム識別子 (RID) (<RuntimeIdentifier>) にはターゲット フレームワークが含まれます。The Windows Runtime Identifier (RID) (<RuntimeIdentifier>) contains the target framework. 次の例では、RID が win7-x64 に設定されています。In the following example, the RID is set to win7-x64. <SelfContained> プロパティが false に設定されている。The <SelfContained> property is set to false. これらのプロパティによって、Windows 用の実行可能ファイル ( .exe) と共有 .NET Core フレームワークに依存するアプリを生成するよう SDK に指示します。These properties instruct the SDK to generate an executable (.exe) file for Windows and an app that depends on the shared .NET Core framework.

web.config ファイル (通常 ASP.NET Core アプリを発行する際に生成されます) は、Windows サービス アプリに対しては必要ありません。A web.config file, which is normally produced when publishing an ASP.NET Core app, is unnecessary for a Windows Services app. web.config ファイルの作成を無効にするには、true に設定した <IsTransformWebConfigDisabled> プロパティを追加します。To disable the creation of the web.config file, add the <IsTransformWebConfigDisabled> property set to true.

<PropertyGroup>
  <TargetFramework>netcoreapp2.2</TargetFramework>
  <RuntimeIdentifier>win7-x64</RuntimeIdentifier>
  <SelfContained>false</SelfContained>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Windows ランタイム識別子 (RID) (<RuntimeIdentifier>) にはターゲット フレームワークが含まれます。The Windows Runtime Identifier (RID) (<RuntimeIdentifier>) contains the target framework. 次の例では、RID が win7-x64 に設定されています。In the following example, the RID is set to win7-x64. <SelfContained> プロパティが false に設定されている。The <SelfContained> property is set to false. これらのプロパティによって、Windows 用の実行可能ファイル ( .exe) と共有 .NET Core フレームワークに依存するアプリを生成するよう SDK に指示します。These properties instruct the SDK to generate an executable (.exe) file for Windows and an app that depends on the shared .NET Core framework.

<UseAppHost> プロパティが true に設定されている。The <UseAppHost> property is set to true. このプロパティによって、サービスに FDD のアクティブ化パス (実行可能ファイル、 .exe) を指定します。This property provides the service with an activation path (an executable, .exe) for an FDD.

web.config ファイル (通常 ASP.NET Core アプリを発行する際に生成されます) は、Windows サービス アプリに対しては必要ありません。A web.config file, which is normally produced when publishing an ASP.NET Core app, is unnecessary for a Windows Services app. web.config ファイルの作成を無効にするには、true に設定した <IsTransformWebConfigDisabled> プロパティを追加します。To disable the creation of the web.config file, add the <IsTransformWebConfigDisabled> property set to true.

<PropertyGroup>
  <TargetFramework>netcoreapp2.1</TargetFramework>
  <RuntimeIdentifier>win7-x64</RuntimeIdentifier>
  <UseAppHost>true</UseAppHost>
  <SelfContained>false</SelfContained>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

自己完結型の展開 (SCD)Self-contained deployment (SCD)

自己完結型の展開 (SCD) は、ホスト システムに共有フレームワークが存在することに依存しません。Self-contained deployment (SCD) doesn't rely on the presence of a shared framework on the host system. ランタイムとアプリの依存関係が、アプリと共に展開されます。The runtime and the app's dependencies are deployed with the app.

Windows ランタイム識別子 (RID) は、ターゲット フレームワークを格納する <PropertyGroup> に含まれます。A Windows Runtime Identifier (RID) is included in the <PropertyGroup> that contains the target framework:

<RuntimeIdentifier>win7-x64</RuntimeIdentifier>

複数の RID を発行するには、次の処理を実行します。To publish for multiple RIDs:

  • セミコロンで区切られたリストの形式で RID を指定します。Provide the RIDs in a semicolon-delimited list.
  • プロパティ名 <RuntimeIdentifiers> (複数) を使用します。Use the property name <RuntimeIdentifiers> (plural).

詳細については、「.NET Core の RID カタログ」を参照してください。For more information, see .NET Core RID Catalog.

<SelfContained> プロパティが true に設定されています。A <SelfContained> property is set to true:

<SelfContained>true</SelfContained>

サービス ユーザー アカウントService user account

サービス用のユーザー アカウントを作成するには、PowerShell 6 の管理コマンド シェルから New-LocalUser コマンドレットを使用します。To create a user account for a service, use the New-LocalUser cmdlet from an administrative PowerShell 6 command shell.

Windows 10 October 2018 Update (バージョン 1809/ビルド 10.0.17763) 以降:On Windows 10 October 2018 Update (version 1809/build 10.0.17763) or later:

New-LocalUser -Name {NAME}

Windows 10 October 2018 Update (バージョン 1809/ビルド 10.0.17763) 以前の Windows OS:On Windows OS earlier than the Windows 10 October 2018 Update (version 1809/build 10.0.17763):

powershell -Command "New-LocalUser -Name {NAME}"

入力を求められたら、強力なパスワードを指定します。Provide a strong password when prompted.

New-LocalUser コマンドレットに DateTime という有効期限で -AccountExpires パラメーターを指定しない場合、アカウントは期限切れになりません。Unless the -AccountExpires parameter is supplied to the New-LocalUser cmdlet with an expiration DateTime, the account doesn't expire.

詳しくは、「Microsoft.PowerShell.LocalAccounts」および「Service User Accounts (サービス ユーザー アカウント)」をご覧ください。For more information, see Microsoft.PowerShell.LocalAccounts and Service User Accounts.

Active Directory を使う場合、ユーザーを管理するための別の方法は、マネージド サービス アカウントを使うことです。An alternative approach to managing users when using Active Directory is to use Managed Service Accounts. 詳細については、「Group Managed Service Accounts Overview (グループ マネージド サービス アカウントの概要)」をご覧ください。For more information, see Group Managed Service Accounts Overview.

サービスとしてログオン権利Log on as a service rights

サービス ユーザー アカウントにサービスとしてログオン権利を確立するには、次の処理を実行します。To establish Log on as a service rights for a service user account:

  1. secpol.msc を実行して、ローカル セキュリティ ポリシー エディターを開きます。Open the Local Security Policy editor by running secpol.msc.
  2. [ローカル ポリシー] ノードを展開し、 [ユーザー権利の割り当て] を選択します。Expand the Local Policies node and select User Rights Assignment.
  3. [サービスとしてログオン] ポリシーを開きます。Open the Log on as a service policy.
  4. [ユーザーまたはグループの追加] を選択します。Select Add User or Group.
  5. 次のいずれかの方法を使用して、オブジェクト名 (ユーザー アカウント) を指定します。Provide the object name (user account) using either of the following approaches:
    1. オブジェクト名フィールドにユーザー アカウント ({DOMAIN OR COMPUTER NAME\USER}) を入力し、 [OK] を選択して、ポリシーにユーザーを追加します。Type the user account ({DOMAIN OR COMPUTER NAME\USER}) in the object name field and select OK to add the user to the policy.
    2. [詳細] を選択します。Select Advanced. [検索開始] を選択します。Select Find Now. 一覧からユーザー アカウントを選択します。Select the user account from the list. [OK] を選択します。Select OK. 再度 [OK] を選択して、ポリシーにユーザーを追加します。Select OK again to add the user to the policy.
  6. [OK] または [適用] を選択して、変更を受け入れます。Select OK or Apply to accept the changes.

Windows サービスを作成して管理するCreate and manage the Windows Service

サービスを作成するCreate a service

PowerShell コマンドを使用して、サービスを登録します。Use PowerShell commands to register a service. PowerShell 6 の管理コマンド シェルから次のコマンドを実行します。From an administrative PowerShell 6 command shell, execute the following commands:

$acl = Get-Acl "{EXE PATH}"
$aclRuleArgs = {DOMAIN OR COMPUTER NAME\USER}, "Read,Write,ReadAndExecute", "ContainerInherit,ObjectInherit", "None", "Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($aclRuleArgs)
$acl.SetAccessRule($accessRule)
$acl | Set-Acl "{EXE PATH}"

New-Service -Name {NAME} -BinaryPathName {EXE FILE PATH} -Credential {DOMAIN OR COMPUTER NAME\USER} -Description "{DESCRIPTION}" -DisplayName "{DISPLAY NAME}" -StartupType Automatic
  • {EXE PATH} – ホスト上のアプリのフォルダーへのパス (d:\myservice など)。{EXE PATH} – Path to the app's folder on the host (for example, d:\myservice). このパスに、アプリの実行可能ファイルは含めないでください。Don't include the app's executable in the path. 末尾のスラッシュは、必要ありません。A trailing slash isn't required.
  • {DOMAIN OR COMPUTER NAME\USER} – サービスのユーザー アカウント (Contoso\ServiceUser など)。{DOMAIN OR COMPUTER NAME\USER} – Service user account (for example, Contoso\ServiceUser).
  • {NAME} – サービス名 (MyService など)。{NAME} – Service name (for example, MyService).
  • {EXE FILE PATH} – アプリの実行可能ファイルのパス (d:\myservice\myservice.exe など)。{EXE FILE PATH} – The app's executable path (for example, d:\myservice\myservice.exe). 拡張子付きの実行可能ファイルのファイル名を含めます。Include the executable's file name with extension.
  • {DESCRIPTION} – サービスの説明 (My sample service など)。{DESCRIPTION} – Service description (for example, My sample service).
  • {DISPLAY NAME} – サービスの表示名 (My Service など)。{DISPLAY NAME} – Service display name (for example, My Service).

サービスを開始するStart a service

次の PowerShell 6 コマンドでサービスを開始します。Start a service with the following PowerShell 6 command:

Start-Service -Name {NAME}

このコマンドでサービスを開始するには数秒かかります。The command takes a few seconds to start the service.

サービスの状態を確認するDetermine a service's status

サービスの状態を確認するには、次の PowerShell 6 コマンドを使います。To check the status of a service, use the following PowerShell 6 command:

Get-Service -Name {NAME}

この状態は、次のいずれかの値として報告されます。The status is reported as one of the following values:

  • Starting
  • Running
  • Stopping
  • Stopped

サービスを停止するStop a service

次の PowerShell 6 コマンドでサービスを停止します。Stop a service with the following Powershell 6 command:

Stop-Service -Name {NAME}

サービスを削除するRemove a service

サービスを停止した後、少ししてから、次の Powershell 6 コマンドを使ってサービスを削除します。After a short delay to stop a service, remove a service with the following Powershell 6 command:

Remove-Service -Name {NAME}

イベントの開始と停止を扱うHandle starting and stopping events

OnStartingOnStarted、および OnStopping イベントを処理するには、次の処理を実行します。To handle OnStarting, OnStarted, and OnStopping events:

  1. OnStartingOnStarted、および OnStopping メソッドを使用して、WebHostService から派生するクラスを作成します。Create a class that derives from WebHostService with the OnStarting, OnStarted, and OnStopping methods:

    [DesignerCategory("Code")]
    internal class CustomWebHostService : WebHostService
    {
        private ILogger _logger;
    
        public CustomWebHostService(IWebHost host) : base(host)
        {
            _logger = host.Services
                .GetRequiredService<ILogger<CustomWebHostService>>();
        }
    
        protected override void OnStarting(string[] args)
        {
            _logger.LogInformation("OnStarting method called.");
            base.OnStarting(args);
        }
    
        protected override void OnStarted()
        {
            _logger.LogInformation("OnStarted method called.");
            base.OnStarted();
        }
    
        protected override void OnStopping()
        {
            _logger.LogInformation("OnStopping method called.");
            base.OnStopping();
        }
    }
    
  2. CustomWebHostServiceRun に渡す IWebHost の拡張メソッドを作成します。Create an extension method for IWebHost that passes the CustomWebHostService to Run:

    public static class WebHostServiceExtensions
    {
        public static void RunAsCustomService(this IWebHost host)
        {
            var webHostService = new CustomWebHostService(host);
            ServiceBase.Run(webHostService);
        }
    }
    
  3. Program.Main で、RunAsService ではなく、拡張メソッド RunAsCustomService を呼び出します。In Program.Main, call the RunAsCustomService extension method instead of RunAsService:

    host.RunAsCustomService();
    

    Program.Main 内の RunAsService の場所を確認するには、「展開の種類」セクションに示されているコード サンプルを参照してください。To see the location of RunAsService in Program.Main, refer to the code sample shown in the Deployment type section.

プロキシ サーバーとロード バランサーのシナリオProxy server and load balancer scenarios

インターネットまたは企業ネットワークからの要求とやり取りするサービスやプロキシまたはロード バランサーの背後にあるサービスでは、追加の構成が必要になる場合があります。Services that interact with requests from the Internet or a corporate network and are behind a proxy or load balancer might require additional configuration. 詳細については、プロキシ サーバーとロード バランサーを使用するために ASP.NET Core を構成する を参照してください。For more information, see プロキシ サーバーとロード バランサーを使用するために ASP.NET Core を構成する.

HTTPS の構成Configure HTTPS

セキュリティで保護されたエンドポイントを使用してサービスを構成するには、次の処理を実行します。To configure a service with a secure endpoint:

  1. プラットフォームの証明書の取得と展開のメカニズムを使用して、ホスト システム用に X.509 証明書を作成します。Create an X.509 certificate for the hosting system using your platform's certificate acquisition and deployment mechanisms.

  2. Kestrel サーバーの HTTPS エンドポイント構成を指定して、証明書を使用します。Specify a Kestrel server HTTPS endpoint configuration to use the certificate.

サービス エンドポイントをセキュリティで保護するために ASP.NET Core の HTTPS 開発証明書を使用することはできません。Use of the ASP.NET Core HTTPS development certificate to secure a service endpoint isn't supported.

現在のディレクトリとコンテンツのルートCurrent directory and content root

Windows サービスに対して GetCurrentDirectory を呼び出して返される現在の作業ディレクトリは C:\WINDOWS\system32 フォルダーです。The current working directory returned by calling GetCurrentDirectory for a Windows Service is the C:\WINDOWS\system32 folder. system32 フォルダーは、サービスのファイル (設定ファイルなど) を保存するために適した場所ではありません。The system32 folder isn't a suitable location to store a service's files (for example, settings files). 次のいずれかの方法を使用して、サービスのアセットと設定ファイルを管理し、アクセスします。Use one of the following approaches to maintain and access a service's assets and settings files.

ContentRootPath または ContentRootFileProvider を使用するUse ContentRootPath or ContentRootFileProvider

IHostEnvironment.ContentRootPath または ContentRootFileProvider を使用して、アプリのリソースを見つけます。Use IHostEnvironment.ContentRootPath or ContentRootFileProvider to locate an app's resources.

アプリのフォルダーにコンテンツ ルート パスを設定するSet the content root path to the app's folder

ContentRootPath は、サービスの作成時に binPath 引数に指定されたものと同じパスです。The ContentRootPath is the same path provided to the binPath argument when a service is created. GetCurrentDirectory を呼び出して設定ファイルへのパスを作成する代わりに、アプリのコンテンツ ルートへのパスを指定して SetCurrentDirectory を呼び出します。Instead of calling GetCurrentDirectory to create paths to settings files, call SetCurrentDirectory with the path to the app's content root.

Program.Main で、サービスの実行可能ファイルがあるフォルダーへのパスを判別し、そのパスを使用してアプリのコンテンツ ルートを確立します。In Program.Main, determine the path to the folder of the service's executable and use the path to establish the app's content root:

var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
var pathToContentRoot = Path.GetDirectoryName(pathToExe);
Directory.SetCurrentDirectory(pathToContentRoot);

CreateWebHostBuilder(args)
    .Build()
    .RunAsService();

ディスク上の適切な場所にサービスのファイルを格納するStore a service's files in a suitable location on disk

ファイルを含むフォルダーに対して IConfigurationBuilder を使用するときは、SetBasePath を使用して絶対パスを指定します。Specify an absolute path with SetBasePath when using an IConfigurationBuilder to the folder containing the files.

その他の技術情報Additional resources