При запуске приложения 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;