工作人员服务在System32文件夹而不是本地文件夹中寻找appsettings.json

时间:2019-12-04 09:39:00

标签: asp.net-core .net-core windows-services appsettings worker-process

我有一个.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);

如何使该服务查看本地文件夹?

2 个答案:

答案 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()