You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core Docker部署报错:/app/Views/Email找不到

解决ASP.NET Core部署到Linux后找不到邮件视图的问题

看起来你碰到的是跨平台部署时常见的路径与文件包含问题,我来帮你一步步排查解决:

1. 确保视图文件被包含到发布包中

Windows本地运行时,Visual Studio会自动加载Views文件夹内容,但发布到Linux环境时,可能因项目配置缺失导致视图文件没被打包。你需要在项目的.csproj文件中添加以下配置,保证Views目录下的所有文件都能被复制到发布输出里:

<ItemGroup>
  <Content Include="Views/**/*">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>

添加后重新构建镜像,视图文件就会被同步到发布目录的Views文件夹下了。

2. 注意Linux的大小写敏感性

Windows文件系统不区分大小写,但Linux是严格区分的。你代码里写的路径是Views/Email,要确保实际文件目录和文件名的大小写完全匹配——比如不能是views/email或Views/email,必须和代码中的写法一致。

3. 用应用基目录替代当前目录

Linux容器中,Directory.GetCurrentDirectory()返回的路径可能和预期不符,建议改用应用程序的基目录来构建路径,这样更可靠:

修改你的GetRazorPage方法:

private RazorLightEngine GetRazorPage(string view) {
    // 使用应用基目录而非当前目录
    string appBaseDirectory = AppContext.BaseDirectory;
    var fullPath = Path.Combine(appBaseDirectory, view);
    return new RazorLightEngineBuilder()
        .UseFilesystemProject(fullPath)
        .UseMemoryCachingProvider()
        .Build();
}

另外,也可以在Dockerfile里明确设置工作目录为/app,确保应用在预期路径下运行:

WORKDIR /app
COPY --from=publish /app/publish .

4. 验证镜像内的文件结构

你可以进入容器查看实际目录结构,确认Views目录是否存在:

docker exec -it <你的容器ID> bash
# 查看目录内容
ls -la /app/Views

如果发现Views目录不存在,说明发布时未包含文件,回到第一步检查.csproj配置即可。

按照这几步操作,应该就能解决视图找不到的问题了。

内容的提问来源于stack exchange,提问作者Bug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:35:44