Unhandled exception. System.IO.FileNotFoundException: The configuration file 'appsettings.json' was not found and is not optional

164
17 апреля 2022, 17:50

В общем, вызываю в Main:

var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
Directory.SetCurrentDirectory(Path.GetDirectoryName(pathToExe));

А далее метод:

public static IWebHostBuilder CreateHostBuilder(string[] args, bool isService)
{
    var config = new ConfigurationBuilder()
        .AddEnvironmentVariables()
        .AddInMemoryCollection(new[] { new KeyValuePair<string, string>("IsService", isService.ToString()) })
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json")
        .Build();
    
    return WebHost.CreateDefaultBuilder(args).ConfigureLogging((context, logging) =>
        {
            logging.ClearProviders();
            logging.AddSerilog(new LoggerConfiguration()
                .ReadFrom.Configuration(context.Configuration)
                .CreateLogger());
        })
        .UseConfiguration(config)
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIIS()
        .UseStartup<Startup>();
}

И когда пытаюсь все это запустить в IIS, то ловлю ошибку:

Unhandled exception. System.IO.FileNotFoundException: The configuration file 'appsettings.json' was not found and is not optional. The physical path is 'c:\windows\system32\inetsrv\appsettings.json'.

Почему он ищет конфигурационный файл не в той папке? Я же указал путь к базовой директории...

Answer 1

Как я понял, так как я хостю это дело все внутри процесса IIS, то

Process.GetCurrentProcess().MainModule.FileName

Показывает путь к IIS'у.

Я сменил метод определения базовой директории на:

new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath

И все заработало.

Правда, не понимаю 1 момента:

Почему при дебаге там отображается путь к исполняемому файлу, а когда из под IIS запускаешь, то туда попадает путь к директории...

Буду признателен за пояснение в комментариях.

READ ALSO
Значение из строки n, столбца m DataGrid записать в переменную

Значение из строки n, столбца m DataGrid записать в переменную

Есть DataGrid, в одном из столбцов всегда хранится одно и то же числовое значениеКак это самое значение записать в переменную типа int? Знаю, что...

195
Как &quot;сдвинуть&quot; коллекцию от n до m элементов?

Как "сдвинуть" коллекцию от n до m элементов?

У меня есть форма с кнопками "вперед" и "назад" условноПри нажатии на кнопку вперед, показываются следующие 5 элементов коллекции...

213
бесконечная 2D анимация заднего фона (C# unity)

бесконечная 2D анимация заднего фона (C# unity)

хочу сделать анимацию заднего фона в простой 2D игре, чтобы при нажатии на клавиши движения, вслед за персонажем начинал в нужную сторону двигаться...

166