gpt4 book ai didi

c# - 当文件显然应该存在时,为什么 JsonConfigurationSource 会抛出 FileNotFoundException?

转载 作者:行者123 更新时间:2023-12-03 08:14:21 24 4
gpt4 key购买 nike

考虑以下 C# 代码:

var json = "{ \"LogLevel\": \"Debug\" }";
const string filePath = @"C:\temp\tempconfiguration.json";
File.WriteAllText(filePath, json);
var jsonConfigurationSource = new JsonConfigurationSource { Path = filePath };
var jsonConfigurationProvider = new JsonConfigurationProvider(jsonConfigurationSource);
var configuration = new ConfigurationRoot(new List<IConfigurationProvider> { jsonConfigurationProvider });

当我运行它时,它会抛出:

System.IO.FileNotFoundException
The configuration file 'C:\temp\tempconfiguration.json' was not found and is not optional.

这对我来说毫无意义。该文件显然存在(我可以在 Windows 资源管理器中看到它)。谁能向我解释这里发生了什么?提前致谢!

(我知道我也可以使用 JsonStreamConfigurationProvider 从流中读取,但我希望也能够从文件中读取配置。主要是因为JsonStreamConfigurationProvider 不支持 IConfigurationRoot.Reload。)

我正在运行 .NET 5.0 和 C# 9。

最佳答案

问题是 Path 是相对于 JsonConfigurationSourceFileProvider 的。您可以显式设置 FileProvider:

var jsonConfigurationSource = new JsonConfigurationSource { Path = Path.GetFileName(filePath) };
jsonConfigurationSource.FileProvider = new PhysicalFileProvider(Path.GetDirectoryName(filePath));

或者更简单的方法,调用ResolveFileProvider:

var jsonConfigurationSource = new JsonConfigurationSource { Path = filePath };
jsonConfigurationSource.ResolveFileProvider();

它将自动从您的绝对路径创建 FileProvider 并在之后使该路径成为相对路径(因此将为您执行与上面相同的操作)。

关于c# - 当文件显然应该存在时,为什么 JsonConfigurationSource 会抛出 FileNotFoundException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69912329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com