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

时间:2020-03-05 02:23:37

标签: c# .net-core-3.1

如何更改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的位置。

1 个答案:

答案 0 :(得分:2)

警告:我尚未运行代码段。

您可以直接创建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();
}