Consider the following C# code:
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 });
When I run this, it throws:
System.IO.FileNotFoundException
The configuration file 'C:\temp\tempconfiguration.json' was not found and is not optional.
That makes no sense to me. The file clearly exists (I can see it in Windows Explorer). Can anyone explain to me what goes on here? Thanks in advance!
(I know I can also use JsonStreamConfigurationProvider to read from a stream, but I want to be able to also read the configuration from a file. Mainly because JsonStreamConfigurationProvider does not support IConfigurationRoot.Reload.)
I am running .NET 5.0 and C# 9.
Problem is that Path is relative to FileProvider of JsonConfigurationSource. You can either set FileProvider explicitly:
var jsonConfigurationSource = new JsonConfigurationSource { Path = Path.GetFileName(filePath) };
jsonConfigurationSource.FileProvider = new PhysicalFileProvider(Path.GetDirectoryName(filePath));
Or easier way, call ResolveFileProvider:
var jsonConfigurationSource = new JsonConfigurationSource { Path = filePath };
jsonConfigurationSource.ResolveFileProvider();
Which will automatically create FileProvider from your absolute path AND make that path relative after that (so will do the same as above for you).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With