Asp.net-Core

Worker Service 在 System32 文件夾而不是本地文件夾中尋找 appsettings.json

  • March 29, 2022

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

如何使服務查看本地文件夾?

那是因為目前目錄C:\Windows\System32在執行時更改為。你可以得到一個相對路徑Assembly.GetExecutingAssembly()。例如:

var configBuilder = new ConfigurationBuilder()
   .SetBasePath( Path.GetDirectoryName( Assembly.GetExecutingAssembly().Location))
   .AddJsonFile("appsettings.json");
var configuration = configBuilder.Build();

我已經在 Windows 服務中成功使用了Host ASP.NET Core 中的文件

簡而言之,您應該只添加.UseWindowsService()配置建構器步驟,如下所示:

Host.CreateDefaultBuilder(args)
   .UseWindowsService()
   .ConfigureAppConfiguration((hostContext, configuration) => 
       {
           //...set your configurations here
       })
       .ConfigureServices((hostContext, services) =>
       {
           //...configure you services here
       }

引用自:https://stackoverflow.com/questions/59172886