.Net Core 3.0 可执行文件不读取 appsettings.json

Posted

技术标签:

【中文标题】.Net Core 3.0 可执行文件不读取 appsettings.json【英文标题】:.Net Core 3.0 executable doesn't read appsettings.json 【发布时间】:2020-01-28 14:25:03 【问题描述】:

我正在编写一个简单的 .Net Core 3.0 控制台应用程序并作为单个可执行文件发布。

我想出了如何排除 appsettings.json 文件,但是当我运行应用程序时,它使用原始设置并且不遵守我对 `appsettings.json 文件所做的更改。

也许当我运行可执行文件时,它会将原始 appsettings.json 文件复制到某处的临时文件夹并读取该文件而不是原始位置的文件?

如果是这样,在 Debian Linux 上运行时该临时位置在哪里?

static void Main(string[] args)

    private static MySettings settings = new MySettings();

    var config = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json", false, true)
        .Build();

    config.GetSection("Settings").Bind(settings);

    rootPath = settings.RootPath;


public class MySettings
 
    public int Buffer  get; set; 
    public string RootPath  get; set; 
    public int FrequencySeconds  get; set; 

【问题讨论】:

我改进了格式并添加了相关标签 如何阅读 appsettings.json? 我已更新帖子以显示代码的相关部分 @Matthew 显示相同的设置文件 @Matthew 也尝试设置工作目录.SetBasePath(Directory.GetCurrentDirectory()) 【参考方案1】:

尝试设置工作目录的基本路径

.SetBasePath(Directory.GetCurrentDirectory())

另外,绑定可以在该部分使用.Get<T>() 完成

static void Main(string[] args)     

    var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory()) //<--
        .AddJsonFile("appsettings.json", false, true)
        .Build();

    MySettings settings = config.GetSection("Settings").Get<MySettings>();

    rootPath = settings.RootPath;

【讨论】:

.net core 3.1: 'ConfigurationBuilder' 不包含'SetBasePath' 的定义,并且找不到接受'ConfigurationBuilder' 类型的第一个参数的可访问扩展方法'SetBasePath' ... @CharlesOkwuagwu 确保你有必要的库引用docs.microsoft.com/en-us/dotnet/api/…

以上是关于.Net Core 3.0 可执行文件不读取 appsettings.json的主要内容,如果未能解决你的问题,请参考以下文章

Publish.net core 3.0 as FDE for win on linux

使用 .NET core 3.0/System.text.Json 解析 JSON 文件

Asp.net core 配置文件

.NET Core 3.0 可卸载程序集原理简析

无法使用 ODBC 连接从 .Net Core 3.0 访问

.Net Core 读取Json配置文件