为什么ubuntu中的NET Core 3.1 BackgroundWorker无法访问环境变量?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么ubuntu中的NET Core 3.1 BackgroundWorker无法访问环境变量?相关的知识,希望对你有一定的参考价值。
我有一个.net core 3.1后台工作程序,作为后台工作程序安装在ubuntu中。但是它无法获取我需要进行多配置的环境变量的值,这就是为什么您可以看到主机环境的值是默认值,即Production。
我已经尝试通过hostenvironment.environmentname和Environment.GetEnvironmentVariable来获取它。
/ etc / systemd /中的我的服务文件
[Unit]
Description=TestService
[Service]
Type=notify
WorkingDirectory=/home/centos/TestService/
ExecStart=/usr/bin/dotnet /home/centos/TestService/WorkerService2.dll
User=centos
[Install]
WantedBy=multi-user.target
。NET Core 3.1后台工作程序中的代码。
_logger.LogInformation("Worker running at: time", DateTimeOffset.Now);
_logger.LogError("ERROR testing");
_logger.LogInformation($"Hosting Enviornment: _hostEnvironment.EnvironmentName");
_logger.LogInformation(_configuration["Test"]);
var basePath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
var contentroothpath = _hostEnvironment.ContentRootPath;
Console.WriteLine($"basepath = basePath");
Console.WriteLine($"contentrootpath = contentroothpath");
_logger.LogInformation($"basepath = basePath");
_logger.LogInformation($"contentrootpath = contentroothpath");
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var environmentName2 = Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT");
_logger.LogInformation($"ASPNETCORE_ENVIRONMENT = environmentName");
_logger.LogInformation($"DOTNET_ENVIRONMENT = environmentName2");
cmd输出。
program.cs中的代码
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSystemd()
.ConfigureServices((hostContext, services) =>
services.AddHostedService<Worker>();
var basePath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
//NLog.LogManager.LoadConfiguration($"basePath/NLog.hostContext.HostingEnvironment.ContentRootPath.config");
)
.ConfigureAppConfiguration((hostingContext, config) =>
config.AddJsonFile(
$"appsettings.hostingContext.HostingEnvironment.EnvironmentName.json", optional: true, reloadOnChange: true);
//NLog.LogManager.LoadConfiguration($"/home/centos/TestService/hostingContext.HostingEnvironment.EnvironmentName.config");
//NLog.LogManager.LoadConfiguration($"basePath" +
// $"/NLog.hostingContext.HostingEnvironment.EnvironmentName.config");
);
答案
您将需要在Main()中访问HostBuilderContext来访问托管环境,如下所示:>
CreateHostBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
var env = hostingContext.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
if (env.IsDevelopment() || env.EnvironmentName.ToLower() == "dev")
config.AddJsonFile("appsettings.dev.json", optional: true, reloadOnChange: true);
else if (env.IsStaging() || env.EnvironmentName.ToLower() == "stage")
config.AddJsonFile("appsettings.stage.json", optional: true, reloadOnChange: true);
config.AddEnvironmentVariables();
).Build().Run();
以上是关于为什么ubuntu中的NET Core 3.1 BackgroundWorker无法访问环境变量?的主要内容,如果未能解决你的问题,请参考以下文章
为啥从 .net core 3.1 迁移到 .net 5 时 JSON 返回值发生了变化
HTTP 错误 500.0 - Dot net core 3.1 中的 ASP.NET Core IIS 托管失败(进程中)
.NET Core 3.1 中的 Linq 表达式 GroupBy 错误
如何在 ASP.NET Core 3.1 的另一个应用程序中包含用户管理器