我有一个.Net核心工作程序服务,该服务作为Windows服务运行。该服务使用appsettings.json文件获取配置信息。使用SC CREATE
命令安装服务后,服务失败。
在事件查看器中,我发现错误,找不到文件C:\Windows\System32\appsettings.json
。我的服务文件放在另一个文件夹c:\Services\
中,而不是在那个位置查看,该服务正在System32文件夹中寻找文件。
配置注册如下。
var configBuilder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
var configuration = configBuilder.Build();
services.AddSingleton(configuration);
如何使该服务查看本地文件夹?
答案 0 :(得分:1)
那是因为在运行时当前目录已更改为C:\Windows\System32
。您可以通过Assembly.GetExecutingAssembly()
获得相对路径。例如:
var configBuilder = new ConfigurationBuilder()
.SetBasePath( Path.GetDirectoryName( Assembly.GetExecutingAssembly().Location))
.AddJsonFile("appsettings.json");
var configuration = configBuilder.Build();
答案 1 :(得分:1)
我已成功使用Host ASP.NET Core in a Windows Service中的文档
简而言之,您只需在配置构建器步骤中添加if (env.IsProduction())
{
app.Use((context, next) =>
{
context.Request.Host = new HostString("<gateway.host>");
return next();
});
}
,如下所示:
.UseWindowsService()