Получите значения appsettings.json в рабочей службе .net core 3.0 после публикации в качестве службы Windows - PullRequest
2 голосов
/ 09 октября 2019

После ответа: .NET Core 3 Worker Service Настройки Внедрение зависимостей

Я могу получить настройки в Debug или в Release, в классе Worker.cs, но при развертывании в качестве службы Windowsэти значения возвращаются как нуль

Worker.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"
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Из-за отсутствия опыта работы с .NET core 3.0 я перестал добавлять пакет в проект и, следуя документации на веб-сайте Microsoft, нашел решение. Я решил проблему следующим образом:

. В файле Program.cs я добавил .UseWindowsService () и добавил пакет Microsoft.Extensions.Hosting.WindowsServices, как описано в приведенной ниже ссылке.

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-3.0&tabs=visual-studio

0 голосов
/ 09 октября 2019

Есть несколько способов справиться с этим.

  1. Вы можете использовать новый рабочий шаблон dotnet

dotnet new worker

Вручную измените тип проекта на Microsoft.NET.Sdk.Worker в вашем .csproj

<Project Sdk="Microsoft.NET.Sdk.Worker">

В вашем .csproj добавьте файл appsettings.json и скопируйте его в выходной каталог
  <ItemGroup>
    <None Update="appsettings.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
  </ItemGroup>

Если у вас есть существующий проект, я бы порекомендовал # 2 преобразовать ваш csproj в нас. Worker Sdk, в качестве альтернативы, если просто создать новый проект, используйте # 1. # 3 - ужасный хак, просто скопировать файл appsettings.json в ваш вывод, я не рекомендую этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...