gpt4 book ai didi

.net - 通过 Docker 运行 .Net Core 应用程序时无法找到 .XML 文件

转载 作者:行者123 更新时间:2023-12-02 18:08:02 25 4
gpt4 key购买 nike

使用 Docker 运行 .Net Core API (v2.2) 时,无法找到 .XML 文件以进行 swagger 并尝试在本地主机上访问它时崩溃,并出现以下错误:
FileNotFoundException: Could not find file '/app/Account.API.XML'.
在检查容器时,我可以看到该文件存在于目录中,但我不确定为什么它无法检测到它。这是我的容器的内容:

root@538b7c4e4b45:/app# ls 
Account.API.deps.json Account.API.pdb Account.API.xml Swashbuckle.AspNetCore.Swagger.dll Swashbuckle.AspNetCore.SwaggerUI.dll appsettings.Development.json web.config Account.API.dll Account.API.runtimeconfig.json Microsoft.OpenApi.dll Swashbuckle.AspNetCore.SwaggerGen.dll Swashbuckle.AspNetCore.dll appsettings.json

这是我的 Dockerfile 的内容:
# Create a release executable of the service
FROM microsoft/dotnet:2.2-sdk AS builder
WORKDIR /build
COPY ./ ./
RUN dotnet publish Account.API/Account.API.csproj --framework netcoreapp2.2 --configuration Release --output /release

# Run the executable with .Net Core runtime
FROM microsoft/dotnet:2.2-aspnetcore-runtime

ARG ENV_NAME
ENV ASPNETCORE_ENVIRONMENT=$ENV_NAME
WORKDIR /app
COPY --from=builder /release ./
EXPOSE 80
ENTRYPOINT ["dotnet", "Account.API.dll"]

文件注册如下:
  services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "Account API", Version = "v1" });

var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);

c.IncludeXmlComments(xmlPath);
});

但是,在 Docker 之外,如果我在 Dockerfile 中创建具有相同选项的版本,然后在本地运行 .dll,它能够找到所需的 .XML 文件并按预期运行。

关于为什么会这样的任何想法?
任何想法将不胜感激。

谢谢

最佳答案

已解决 - 由于 docker 容器在 linux 上运行,并且文件不区分大小写,我不得不在 program.cs 中更改以下行:var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.XML"var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"用小写的“xml”。

关于.net - 通过 Docker 运行 .Net Core 应用程序时无法找到 .XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57711880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com