首页 > 解决方案 > 为什么我发布后我的服务器设置没有被读取?

问题描述

我正在尝试使用 dotnet core 3.1 创建 Windows 服务。当我从 Visual Studio 本地运行服务时,这些设置有效(即_serverAddress显示localhost:5874),但在我发布并运行 exe 之后无效。

我正在使用带有 DI 的选项模式...

private readonly Uri _serverAddress;

public Worker(ILogger<Worker> logger, IOptions<ServerSettings> serverSettings)
{
    _serverAddress = serverSettings.Value.ServerAddress;
}
using (var client = new HttpClient())
{
    var response = await client.GetAsync($"{_serverAddress}api/Importapi", stoppingToken);
    response.EnsureSuccessStatusCode();
}

我无法理解的是为什么_serverAddress当我通过 Visual Studio 运行时会填充,但在我发布后,_serverAddress它是空的。我不确定在这两种情况下是否相关,服务器变量是相同的:localhost:5874,因为我只是试图让服务在我的本地计算机上运行以与也在 localhost 上运行的 Web 应用程序对话在不同的端口下。

当我运行发布时,部署模式是“自包含”的,我在 x64 上运行,生成单个文件,ReadyToRun 编译...

那么可能是什么导致了这个问题,我该如何解决呢?

谢谢!

标签: c#.net-corewindows-services

解决方案


看来这可能是 Visual Studio 的 bug,因为命令行版本没有这个问题。换句话说,如果我通过命令行发布:dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true那么 appsettings.json 就会随之而来。


推荐阅读