FileConfigurationProvider FileNotFoundException

Я пытаюсь загрузить ini-файл с помощью IniConfigurationProvider следующим образом (используя net core 3.1)

var config = @"D:\config.ini";
Console.WriteLine(File.Exists(config));   //true
var configProvider = new IniConfigurationProvider(
    new IniConfigurationSource() {
        Path = config
    }
);
configProvider.Load();

но выдает исключение FileNotFoundException

Unhandled exception. System.IO.FileNotFoundException: The configuration file 'D:\config.ini' was not found and is not optional.
   at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(Boolean reload)
   at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load()
   at MyProgram.Program.ThreadProc() in d:\apps\Program.cs:line 39
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

File.Exists печатает true, так почему же тогда это исключение?

2 ответа

IniConfigurationSource не поддерживает полный путь к файлу конфигурации. Вы должны использовать только имя файла. И добавьте поставщика файлов.

var configProvider = new IniConfigurationProvider(
    new IniConfigurationSource() {
        Path = "config.ini",
        FileProvider = new PhysicalFileProvider("D:\\")
    }
);
configProvider.Load();

Я предполагаю, что это ошибка, потому что перегрузка потока работает правильно

configProvider.Load(File.OpenRead(config));
Другие вопросы по тегам