当运行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时,我找不到办法做到这一点。
以下我尝试过的事情:
配置服务只接受IServiceCollection,因此不允许:
public void ConfigureServices(IServiceCollection services, IHostingEnvironment env) {...}
此时未设置HostingEnvironment:
public Startup(IHostingEnvironment env) {
HostingEnvironment = env; // <-- is null
}
此处,内容根路径为“C:\ Windows \ System32”,而不是Program.cs中提供的路径
string contentRoot = services.BuildServiceProvider()
.GetService<IHostingEnvironment>()
.ContentRootPath;