Служба Windows .NET 8 считает, что среда хостинга является рабочей при локальной отладкеC#

Место общения программистов C#
Ответить
Anonymous
 Служба Windows .NET 8 считает, что среда хостинга является рабочей при локальной отладке

Сообщение Anonymous »

У нас есть приложение .NET 8, которое мы запускаем как службу Windows.
Проблема: при выполнении 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();
Обновление №1
После некоторого прочтения выяснилось, что общий сборщик IHost проверяет переменную DOTNET_, а не ASPNETCORE_. Добавили эту переменную в файл launchsettings.json, и теперь она работает правильно.
Но мой вопрос все еще остается: почему универсальный сборщик IHost по умолчанию видит DOTNET_ENVIRONMENT как Production?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ebugging-l
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»