Загрузка appsettings. <>. Json файл при размещении через Windows Service - PullRequest
0 голосов
/ 01 марта 2019

У меня проблема с загрузкой правильных настроек приложения. <>. Json-файл, когда приложение размещено через Windows Service.

Ниже приведена настройка для хостинга службы Windows.

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-2.2

 public class Program
    {
        #region ServiceOrConsole

        public static void Main(string[] args)
        {
            var isService = !(Debugger.IsAttached || args.Contains("--console"));
            var builder = CreateWebHostBuilder(args.Where(arg => arg != "--console").ToArray());


            if (isService)
            {
                var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
                var pathToContentRoot = Path.GetDirectoryName(pathToExe);
                //use a path to the app's published location instead of Directory.GetCurrentDirectory().
                builder.UseContentRoot(pathToContentRoot);
            }

            var host = builder.Build();

            if (isService)
            {
                host.RunAsCustomService();
            }
            else
            {             
                host.Run();

            }
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args)
        {
            var cfg = Startup.GetConfiguration();

            return WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()               
                .UseUrls("http://localhost:1234");

        }         
        #endregion
    }

Приведенный ниже метод Get должен отображать правильное значение Test в зависимости от среды.Проблема в том, что он всегда читает из файла appsettings.json.

 [Route("api/[controller]")]
[ApiController]
public class CfgController : ControllerBase
{

    private IConfiguration _configuration;

    public CfgController (IConfiguration configuration)
    {

        _configuration = configuration;
    }


    [HttpGet]
    public IActionResult Get()
    {
        var test =_configuration.GetValue<string>("Test");

        return Ok($"{test}");
    }

}

appsettings.json

    {
  "Test":  "default" 
}

appsettings.Development.json

{
  "Test": "default dev"
}

Нижето, что я пробовал, безрезультатно

1 Передача аргументов в службу Windows

sc start "My service" --environment "Development"

2 задайте среду Windows ниже и запустите службу

set ASPNETCORE_ENVIRONMENT=Development
sc start "My service"

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-2.2 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/index?view=aspnetcore-2.2#json-configuration-provider https://andrewlock.net/how-to-set-the-hosting-environment-in-asp-net-core/

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