簡體   English   中英

.NET 核心控制台應用程序 - 未在運行時設置適當的基於 appsettings 的環境變量

[英].NET Core Console App - not setting appropriate appsettings based env variable at runtime

我正在開發 .NET Core 5 控制台應用程序,我正在嘗試加載 appsettings.[environment].json 在運行時基於我在項目屬性下調試中設置的“ASPNETCORE_ENVIRONMENT = Development”。

在 BuildConfig 方法中,我可以看到

Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")

正在正確返回“ Development ”文本並加載 2 文件(appsettings.json,appsettings.development.json)。

但是當我通過構造函數將配置傳遞給不同的 class 然后檢查該 class 中的配置時,我看到的是(appsettings.json,appsettings.production file.json)文件而不是開發?

我的項目中還沒有 appsettings.production.json 文件。

static void Main(string[] args)
{
    try
    {
        //setting for SeriLog
        var builder = new ConfigurationBuilder();
        BuildConfig(builder);

        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .ReadFrom.Configuration(builder.Build())
            .Enrich.FromLogContext()
            .WriteTo.Console()
            .WriteTo.File(@"Log\Log.txt")
            .CreateLogger();

        Log.Logger.Information("Application Starting");

        var host = Host.CreateDefaultBuilder()
            .ConfigureServices((context, services) =>
            {
                services.AddTransient<IRIUProcess, RIUProcess>();
            })
            .UseSerilog()
            .Build();

        var svc = ActivatorUtilities.CreateInstance<RIUProcess>(host.Services);
        svc.Run(args);
    }
    catch (Exception ex)
    {
        Log.Logger.Error(ex.ToString());
    }
}

static void BuildConfig(IConfigurationBuilder builder)
{
    builder.SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}", optional: true, reloadOnChange: true)
        .AddEnvironmentVariables();
}

配置生成器返回像實體框架核心一樣配置的自我實例

在此處輸入圖像描述

//setting for SeriLog
var builder = new ConfigurationBuilder();
BuildConfig(builder);

應該

//setting for SeriLog
var builder = new ConfigurationBuilder();
builder = BuildConfig(builder);

沒有它,您的配置生成器將保持不變。 也為此調整 BuildConfig 方法。

然后您可以刪除 CreateDefaultBuilder(使用默認 AspNetCore 配置)並直接使用您的配置實例:

new HostBuilder().ConfigureHostConfiguration(a => a.AddConfiguration(builder.Build()))

https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.hostbuilder.configurehostconfiguration?view=dotnet-plat-ext-5.0

然后,您的主機將具有與 SeriLog 和主機相同的配置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM