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

ASP.NET Core 6.0本地读文件正常 staging环境报目录未找到异常

异常根因
  • 你写的../Application/xxx这类相对路径,解析规则是相对于程序启动时的当前工作目录,和源码文件CheckoutConfirmCommand.cs的存放位置没有任何关系。本地开发时用IDE、dotnet run启动,工作目录恰好是项目源码目录,凑上你写的路径碰巧能命中源码里的html文件,纯属于巧合——哪怕在本地,如果你切到其他目录执行编译好的dll,一样会报找不到文件的错。
  • staging环境的程序工作目录和本地完全不同,从报错信息看,staging上程序的工作目录是系统根目录/,最终拼出来的路径是/Application/Cart/Commands/CheckoutConfirm/HtmlFiles/Start.html,和实际文件位置完全不匹配。
  • 你参考本地源码的目录结构写路径,但ASP.NET Core发布后不会保留src/Application/xxx这类源码层级目录,而且默认情况下你项目里的html文件如果没配置复制规则,根本不会被输出到发布目录里,就算路径写对了也读不到。
修复方案
  1. 先配置html文件的输出规则:右键项目里的Start.html打开属性面板,将「复制到输出目录」设置为如果较新则复制,「生成操作」设置为「内容」,保证发布时这个文件会被拷贝到发布输出目录的对应位置。
  2. 抛弃硬编码的相对路径写法,通过依赖注入获取IWebHostEnvironment实例,用它提供的ContentRootPath(程序内容根目录,发布后就是发布目录的根路径)拼接绝对路径读取文件,参考代码:
// 构造函数注入IWebHostEnvironment实例
private readonly IWebHostEnvironment _hostEnv;
public CheckoutConfirmCommand(IWebHostEnvironment hostEnv)
{
    _hostEnv = hostEnv;
}

// 读取文件的代码
var fileFullPath = Path.Combine(
    _hostEnv.ContentRootPath,
    "Application/Cart/Commands/CheckoutConfirm/HtmlFiles/Start.html"
);
var start = File.ReadAllText(fileFullPath);

注意:Path.Combine会自动处理不同系统的路径分隔符,不要自己手写斜杠拼路径,避免Windows/Linux路径格式不兼容的问题。

内容的提问来源于stack exchange,提问作者hanushi-thana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:57:20