[英]Get appsettings.json values on .net core 3.0 worker service after publish as windows service
按照答案: .NET Core 3 Worker Service Settings Dependency Injection
我可以在调试或发布中获取设置,在 class Worker.cs 但是当部署为 Windows 服务时,此值返回为 null
工人.cs
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly ServiceSettings _serviceSettings;
private readonly ServiceConfigurations _serviceConfigurations;
public Worker(ILogger<Worker> logger, IOptions<ServiceConfigurations> serviceConfigurations, IOptions<ServiceSettings> serviceSettings)
{
_logger = logger;
_serviceConfigurations = serviceConfigurations.Value;
_logger.LogInformation($"Worker running at: {DateTime.Now}");
_serviceSettings = serviceSettings.Value;
string retornoPathLog = null;
string PathLog = _serviceSettings.PathLog;
if (!Directory.Exists(PathLog))
{
retornoPathLog = "Diretório de LOG " + PathLog;
Directory.CreateDirectory(PathLog);
}
//Configure Serilo for Logging
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.Enrich.FromLogContext()
.WriteTo.File(PathLog + "log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
if (string.IsNullOrEmpty(retornoPathLog) == false)
{
Log.Information("[WFoneService - Watch Event] " + retornoPathLog);
}
}
}
appsettings.json:
{
"ConnectionStrings": {
"WFoneConnection": ""
},
"ServiceConfigurations": {
"UrlSignalrNotification": "urlValue",
"WatchIp": "ipValue",
"WatchPort": "portValue"
},
"ServiceSettings": {
"PathLog": "C:\\Log\\"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}
有几种方法可以处理这个问题。
dotnet new worker
<Project Sdk="Microsoft.NET.Sdk.Worker">
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
如果您有一个现有项目,我建议#2 将您的 csproj 转换为我们的 Worker Sdk,或者如果创建一个新项目很简单,请使用 #1。 #3 只是将 appsettings.json 文件复制到您的 output 是一个可怕的 hack,我不推荐这样做。
由于缺乏 .NET 核心 3.0 的经验,我停止向项目中添加 package,并按照 Microsoft 网站上的文档找到了解决方案。 我解决了如下问题
在 Program.cs 文件中,我添加了.UseWindowsService () 并添加了 Microsoft.Extensions.Hosting.WindowsServices package,如下面的链接所述。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.