C# 从c知道docker linux容器中是否存在目录#
我正在将ASP.NET核心应用程序部署到docker桌面上运行的docker linux容器中(我的机器上有Windows)。我创建了Dockerfile,开头是:C# 从c知道docker linux容器中是否存在目录#,c#,docker,asp.net-core,dockerfile,C#,Docker,Asp.net Core,Dockerfile,我正在将ASP.NET核心应用程序部署到docker桌面上运行的docker linux容器中(我的机器上有Windows)。我创建了Dockerfile,开头是: FROM mcr.microsoft.com/dotnet/core/runtime:2.1-stretch-slim AS base WORKDIR /app/backend 映像创建成功,但当我在容器中运行应用程序时,我得到一个未处理的异常:System.NullReferenceException。我能够在VS 20
FROM mcr.microsoft.com/dotnet/core/runtime:2.1-stretch-slim AS base
WORKDIR /app/backend
映像创建成功,但当我在容器中运行应用程序时,我得到一个未处理的异常:System.NullReferenceException。我能够在VS 2019中使用Docker支持进行调试,我发现这将返回false并引发异常:
if (!Directory.Exists("/app/backend"))
{
throw some custom exception;
}
我试过了,但也没用
DirectoryInfo dir = new DirectoryInfo("/app/backend");
if (!dir.Exists)
{
throw some custom exception
}
我不明白它为什么不工作。我想是因为您的工作目录是
/app/backend
,并且正在执行的dll将存在于linux的backend文件夹中。因此,您的代码将查找文件夹executingPath/app/backend
。所以尝试使用var path=Server.MapPath(“~/app/backend”);如果(!Directory.Exists(path))
您发布的所有代码都不会抛出NullReferenceException-请解决您的问题。我也不明白为什么代码必须检查dir是否存在,如果不存在,则抛出一个非常不清楚的异常,您必须使用调试器来解决它;如果代码想要有一个/app/backend目录,它应该创建它,然后使用它,或者至少抛出一个带有合理消息的异常。。但是,如果管理员要做的只是创建文件夹并重新运行应用程序,那么代码应该创建文件夹本身