如何更改 appsettings.json 在 WorkerService 中的搜索位置

How to change where the appsettings.json is searched for in WorkerService

如何更改 appsettings.json.Net Core 3.1 Worker Service 项目中的搜索位置

我看过一些 Asp.Net Core 2.* 个例子,但 3.1 没有。 下面是我的 Program.cs 文件。我知道我需要在这里改变一些东西,但我不确定是什么。

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

    public static IHostBuilder CreateHostBuilder( string[ ] args ) =>
        Host.CreateDefaultBuilder( args )
            .UseWindowsService( )
            .ConfigureServices( ( hostContext, services ) =>
             {
                 services.AddHostedService<Worker>( );
             } );
}

为什么我想要这个

我需要将此应用程序容器化到 WindowsServerCore 容器中。 appsettings.json 需要可供现场技术人员使用并轻松编辑。

我正计划 bind mounting 一个包含 appsettings.json 从主机到容器的目录。我无法将目录 bind mount 放入我的应用程序 execution 目录中,因为它会隐藏我的 executable。这意味着我需要 bind mount 进入容器中的其他目录(例如,C:\Configuration)。

因此,我想更改 framework 搜索我的 appsettings.json 的位置。

警告:我没有运行代码片段。

您可以直接创建 ConfigurationBuilder 的新实例,而不是使用 CreateDefaultBuilder。该代码看起来类似于以下内容:

Host.CreateDefaultBuilder( args )
            .ConfigureAppConfiguration(
                    (context, configurationBuilder) =>
                    {                        
                       configurationBuilder.SetBasePath("YOUR PATH")
                            .AddJsonFile("appsettings.json", false)
                    })
            })
            .UseWindowsService( )
            .ConfigureServices( ( hostContext, services ) =>
            {
                services.AddHostedService<Worker>( );
            } );

否则,除了使用 Default 设置之外,您还可以从头开始创建自己的 ConfigurationBuilder,如下所示:

public static IConfiguration CreateConfiguration()
{
    var configurationBuilder = new ConfigurationBuilder()
          .SetBasePath("YOUR PATH")
          .AddJsonFile("appsettings.json", false)
          .AddEnvironmentVariables();
    return configurationBuilder.Build();
}