Проблема: при выполнении IHostBuilder.ConfigureAppConfiguration и проверке IHost.HostingEnvironment оно отображается как Production.
Похоже, что IHostBuilder по умолчанию видит переменную среды как производственную?
Нигде в проекте она не настроена для запуска как производственная. >
Я проверил следующие места на наличие значения ASPNETCORE_ENVIRONMENT:
- launchsettings.json — для него установлено значение «Разработка».
- переменные среды системы/пользователя – ASPNETCORE_ENVIRONMENT здесь не заданы, поэтому по умолчанию следует выбрать "Разработка".
- весь проект — нигде для ASPNETCORE_ENVIRONMENT не установлено значение "Производство".
Код Program.cs:
Код: Выделить всё
using LinqToDB.EntityFrameworkCore;
using PosJobs.LT.Server;
using PosJobs.LT.Server.Ioc;
using Sentry.Serilog;
using Serilog;
using Serilog.Events;
using Serilog.Formatting.Compact;
const long LogFileSizeLimit = 5 * 1024 * 1024;
var baseDirectory = AppContext.BaseDirectory;
IHost host = Host.CreateDefaultBuilder(args)
.UseWindowsService(options =>
{
options.ServiceName = "PosJobs.LT";
})
.ConfigureAppConfiguration((ctx, builder) =>
{
var environment = ctx.HostingEnvironment.EnvironmentName;
builder.SetBasePath(baseDirectory);
builder.AddJsonFile("appsettings.json", false, true);
builder.AddJsonFile($"appsettings.{environment}.json", true, true);
builder.AddEnvironmentVariables();
})
.ConfigureServices((ctx, services) =>
{
var configuration = ctx.Configuration;
services.ConfigureHangfire(ctx);
services.ConfigureOptions(configuration);
services.ConfigureServices(configuration);
services.ConfigureDbContexts(configuration);
})
.UseSerilog((hostingContext, loggerConfiguration) =>
{
var f = new FileInfo(baseDirectory);
var drive = Path.GetPathRoot(f.FullName);
var logPath = @$"{drive}\Logs\PosJobs.LT\log_.json";
loggerConfiguration
.MinimumLevel.Information()
.MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Error)
.MinimumLevel.Override("Microsoft.AspNetCore.Hosting.Diagnostics", LogEventLevel.Error)
.MinimumLevel.Override("Microsoft.AspNetCore.Routing.EndpointMiddleware", LogEventLevel.Error)
.MinimumLevel.Override("Microsoft.AspNetCore.Authorization.DefaultAuthorizationService", LogEventLevel.Error)
.MinimumLevel.Override("Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionInvoker",
LogEventLevel.Error)
.MinimumLevel.Override("Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware", LogEventLevel.Error)
.MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Error)
.MinimumLevel.Override("Microsoft.AspNetCore.Mvc", LogEventLevel.Error)
.WriteTo.Console()
.WriteTo.File(new CompactJsonFormatter(),
logPath,
shared: true,
restrictedToMinimumLevel: LogEventLevel.Information,
retainedFileCountLimit: 90,
rollingInterval: RollingInterval.Day,
rollOnFileSizeLimit: true,
fileSizeLimitBytes: LogFileSizeLimit);
if (!hostingContext.HostingEnvironment.IsDevelopment())
{
loggerConfiguration.WriteTo.Sentry(options =>
{
var optionsToSet = hostingContext.Configuration.GetSection("SentrySerilog").Get();
options.Dsn = optionsToSet.Dsn;
options.Environment = optionsToSet.Environment;
options.StackTraceMode = optionsToSet.StackTraceMode;
options.MinimumEventLevel = optionsToSet.MinimumEventLevel;
options.MinimumBreadcrumbLevel = optionsToSet.MinimumBreadcrumbLevel;
options.InitializeSdk = true;
});
}
})
.Build();
IConfiguration config = host.Services.GetRequiredService();
config.RegisterJobs(host.Services);
LinqToDBForEFTools.Initialize();
await host.RunAsync();
После некоторого прочтения выяснилось, что общий сборщик IHost проверяет переменную DOTNET_, а не ASPNETCORE_. Добавили эту переменную в файл launchsettings.json, и теперь она работает правильно.
Но мой вопрос все еще остается: почему универсальный сборщик IHost по умолчанию видит DOTNET_ENVIRONMENT как Production?
Подробнее здесь: https://stackoverflow.com/questions/790 ... ebugging-l
Мобильная версия