作为Windows服务运行时,ConfigureServices()中的ASP.NetCore内容根路径

时间:2018-05-25 07:35:57

标签: c# asp.net-core windows-services

当运行Asp.Net核心应用程序作为Windows服务(使用.net核心兼容包)时,您必须获取Applicationdata的路径与正常运行它不同。正如here所述,你必须这样做:

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();

问题是,当你想在ConfigureServices(...)方法的Startup.cs中访问这个Path时,我找不到办法做到这一点。

以下我尝试过的事情:

#1

配置服务只接受IServiceCollection,因此不允许

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

#2

此时未设置HostingEnvironment:

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

#3

此处,内容根路径为“C:\ Windows \ System32”,而不是Program.cs中提供的路径

string contentRoot = services.BuildServiceProvider()
                             .GetService<IHostingEnvironment>()
                             .ContentRootPath;

0 个答案:

没有答案