Корневой путь содержимого ASP.NetCore в ConfigureServices () при работе в качестве службы Windows - PullRequest
0 голосов
/ 25 мая 2018

При запуске приложения Asp.Net Core в качестве службы Windows (с пакетом совместимости ядра .net) вы должны получить путь к данным приложения, отличный от обычного запуска.Как описано здесь , вы должны сделать это:

string pathToContentRoot = Directory.GetCurrentDirectory();
if (isService) {
    string pathToExe = Process.GetCurrentProcess().MainModule.FileName;
    pathToContentRoot = Path.GetDirectoryName(pathToExe);
}

и установить базовый путь вашего Webhostbuilder (сокращенно):

IConfigurationRoot config = new ConfigurationBuilder()
                                .SetBasePath(pathToContentRoot) 
                                .Build();
IWebHost host = WebHost.CreateDefaultBuilder(args)
                       .UseConfiguration(config)
                       .UseStartup<Startup>()
                       .Build();

Проблема, однако, заключается в том,когда вы хотите получить доступ к этому пути в файле Startup.cs в методе ConfigureServices (...), я не смог найти способ сделать это.

Следующие вещи, которые я пробовал:

# 1

Служба Configure Services принимает только IServiceCollection, поэтому не разрешено :

public void ConfigureServices(IServiceCollection services, IHostingEnvironment env) {...}

# 2

На этом этапе HostingEnvironment являетсяне установлено:

public Startup(IHostingEnvironment env) {
    HostingEnvironment = env; // <-- is null
}

# 3

Здесь путь к корню контента - "C: \ Windows \ System32" , а не тот, который указан в Программе.CS

string contentRoot = services.BuildServiceProvider()
                             .GetService<IHostingEnvironment>()
                             .ContentRootPath;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...