C# Dotnet Core控制台应用程序appsettings.json运行时重新加载

8

我有这样的需求,在我的控制台应用程序运行时可能会更改 appsettings.json 文件。 我使用的代码仅在启动时加载 appsettings.json,一旦应用程序正在运行,它就不会再次刷新。请问有谁可以帮我解决这个问题?

public IConfigurationRoot GetAppssetingsConfig()
    {
        
        var builder = new ConfigurationBuilder()
                       .SetBasePath(Directory.GetCurrentDirectory())
                       .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                       .AddEnvironmentVariables();

        IConfigurationRoot configuration = builder.Build();
        configuration.Reload();

        return configuration;
    }

我期望每次调用上述函数时,它都会读取当前的appsettings.json文件,但这并没有发生。 感谢您的帮助。

你正在运行时编辑哪个appsettings.json文件? - rfmodulator
不确定您的意思,程序中只有一个appsettings.json文件。 - user1063108
如果你在调试程序,有一个项目中的文件(相当于“主”副本),还有一个会复制到生成目录的文件。 - rfmodulator
刚意识到你的意思...我会去看一下...我有预感你是对的...马上回来...谢谢 - user1063108
1
你是100%正确的..嗯...当文件正在被检索时,我正在VS中进行更改,而文件却在调试文件夹中..谢谢你提醒我。 - user1063108
2个回答

4

该配置正在监视当前工作目录下的appsettings.json文件(通过reloadOnChange: true)。

如果进行调试,则这是生成目录。

在调试期间,对项目的appsettings.json文件(即“主”副本)进行的编辑不会反映出来。相反,请编辑生成目录中的副本。


谢谢,我简直不敢相信自己会有这样的脑力损失...感谢你把我叫醒了。我正在运行VS(不是第一次,但由于某些原因大脑死了),并对本地文件进行更改,同时在调试时,文件被传输到Debug文件夹中,当然我的项目文件的更改没有反映出来。再次感谢你把我叫醒了。 - user1063108

0

试一下这个

public IConfiguration GetAppssetingsConfig()
{
 return new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables()
            .Build();
 }

谢谢Serge,但是那并没有帮助我。我已经尝试了很多变化,似乎当应用程序启动时,它会将其视为新会话,但是任何后续请求都不会触发重新加载,因为它可能认为仍然是同一会话。 - user1063108
@user1063108 我的所有代码都经过测试。在我的电脑上可以正常运行。你遇到了什么错误? - Serge
绝对没有错误。我已经观察了断点,它从未在程序运行时读取更改的appsettings.json中的新值。它始终具有在程序启动时加载的值。 - user1063108
我猜这是因为你不应该在运行时更改appsettings。 - Serge
Web应用程序中的appsettings.json在运行时显示正确的更改,我认为每个请求可能都有自己的范围,但是在控制台应用程序中,我需要告诉它将对此函数的每次调用都视为新的请求/范围调用...无论如何,感谢您花费时间。希望有人能看到并提供帮助。 - user1063108

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接