#c# #docker #asp.net-core #dockerfile
#c# #докер #asp.net-core #dockerfile
Вопрос:
Я развертываю ASP.NET Основное приложение к контейнеру docker Linux, запущенному в Docker Desktop (на моем компьютере установлена Windows). Я создал Dockerfile, начиная с:
FROM mcr.microsoft.com/dotnet/core/runtime:2.1-stretch-slim AS base
WORKDIR /app/backend
Создание образа прошло успешно, но когда я запускаю приложение в контейнере, я получаю необработанное исключение: System.NullReferenceException. Я могу отлаживать, используя поддержку Docker в VS 2019, и я обнаружил, что это возвращает false и выдает исключение:
if (!Directory.Exists("/app/backend"))
{
throw some custom exception;
}
Я пробовал это, но это тоже не сработало
DirectoryInfo dir = new DirectoryInfo("/app/backend");
if (!dir.Exists)
{
throw some custom exception
}
Я не могу понять, почему он не работает.
Комментарии:
1. Я думаю, это потому, что ваш рабочий каталог является
/app/backend
, а исполняемая DLL будет существовать внутри внутренней папки в Linux. Таким образом, ваш код будет искать папкуexecutingPath/app/backend
. Итак, попробуйте использоватьvar path = Server.MapPath("~/app/backend"); if(!Directory.Exists(path))
2. Ни один из опубликованных вами кодов не вызывает исключения NullReferenceException — пожалуйста, исправьте свой вопрос
3. Кроме того, я не совсем понимаю, почему код должен проверять наличие каталога, и если он не существует, выдавать исключение, настолько неясное, что вам приходится использовать отладчик для его обработки; если код хочет иметь каталог / app / backend, он должен просто создать его, а затем использовать или, по крайней мере, выдать исключение с разумным сообщением .. но если все, что сделает администратор, это создаст папку и перезапустит приложение, код должен создать саму папку