Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET Core控制台应用程序-运行时未设置基于环境变量的适当appsettings_C#_.net Core - Fatal编程技术网

C# .NET Core控制台应用程序-运行时未设置基于环境变量的适当appsettings

C# .NET Core控制台应用程序-运行时未设置基于环境变量的适当appsettings,c#,.net-core,C#,.net Core,我正在使用.NET Core 5控制台应用程序,并尝试在运行时加载appsettings.[environment].json,该应用程序基于我在“项目属性”下的调试中设置的“ASPNETCORE_environment=Development” 在BuildConfig方法中,我可以看到 Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") 正在正确返回“Development”文本并加载2文件(apps

我正在使用.NET Core 5控制台应用程序,并尝试在运行时加载appsettings.[environment].json,该应用程序基于我在“项目属性”下的调试中设置的“ASPNETCORE_environment=Development”

在BuildConfig方法中,我可以看到

Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")
正在正确返回“Development”文本并加载2文件(appsettings.json、appsettings.Development.json)

但是当我通过构造函数将配置传递给不同的类,然后检查该类中的配置时,我看到的是(appsettings.json,appsettings.production.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();
}
static void Main(字符串[]args)
{
尝试
{
//SeriLog的设置
var builder=new ConfigurationBuilder();
BuildConfig(builder);
Logger.Logger=新的LoggerConfiguration()
.MinimumLevel.Debug()
.ReadFrom.Configuration(builder.Build())
.Enrich.FromLogContext()的
.WriteTo.Console()
.WriteTo.File(@“Log\Log.txt”)
.CreateLogger();
Log.Logger.Information(“应用程序启动”);
var host=host.CreateDefaultBuilder()
.ConfigureServices((上下文、服务)=>
{
services.AddTransient();
})
.useserlog()
.Build();
var svc=ActivatorUtilities.CreateInstance(host.Services);
svc.Run(args);
}
捕获(例外情况除外)
{
Log.Logger.Error(例如ToString());
}
}
静态void BuildConfig(IConfigurationBuilder)
{
builder.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(“appsettings.json”,可选:false,reloadOnChange:true)
.AddJsonFile($”appsettings.{Environment.GetEnvironmentVariable(“ASPNETCORE_Environment”)}),可选:true,重载更改:true)
.AddenEnvironmentVariables();
}

Configuration builder返回像entityframework core一样配置的自实例

应该是

//setting for SeriLog
var builder = new ConfigurationBuilder();
builder = BuildConfig(builder);
否则,您的配置生成器将保持不变。 也要为此调整BuildConfig方法

然后,您可以删除CreateDefaultBuilder(使用默认的AspNetCore配置),并直接使用您的配置实例:

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

然后,您的主机将具有与SeriLog和您的主机相同的配置

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