为什么发布后无法读取服务器设置?

问题描述

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

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

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();
}

我不明白的是为什么在通过Visual Studio运行时填充_serverAddress的原因,但是发布后_serverAddress为空。我不确定这两种情况下的服务器变量是否相同:localhost:5874,因为我只是想让该服务在本地计算机上运行以与Web应用程序对话,这是否有意义?也可以在本地主机上的其他端口上运行。

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

那么什么可能导致此问题以及如何解决

谢谢!

解决方法

这似乎是Visual Studio错误,因为命令行版本没有此问题。换句话说,如果我通过以下命令行发布:dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true,那么appsettings.json就会随之出现。