C#控制台应用程序中如何获取文件相对路径
问题原因
HttpContext 是 ASP.NET Web 框架专属对象,仅在Web请求处理管道中生效,控制台应用未托管Web运行环境,不存在请求上下文,直接调用HttpContext.Current会返回空值触发报错。Server.MapPath的作用是将Web应用的虚拟路径映射为服务端物理路径,仅适用于Web场景。非Web项目没有虚拟目录概念,不需要使用该方法解析路径。
可行方案
第一步:配置文件输出规则
右键项目中的/MailTemplate/template_mail.html,打开属性面板做如下设置:
- 「生成操作」选择
内容 - 「复制到输出目录」选择
如果较新则复制
注意:如果跳过该配置,编译后输出目录不会包含MailTemplate文件夹,运行时会触发文件找不到异常。
第二步:通过运行时API解析路径读取文件
使用运行时自带的路径API获取程序执行根目录,拼接相对路径后读取文件,代码兼容多操作系统:
using System.IO; // 获取程序exe所在的根目录 string appBasePath = AppContext.BaseDirectory; // 自动适配系统路径分隔符,拼接目标文件路径 string templatePath = Path.Combine(appBasePath, "MailTemplate", "template_mail.html"); // 读取文件内容 string content = File.ReadAllText(templatePath);
提示:不要手动拼接斜杠组合路径字符串,
Path.Combine会自动适配Windows、Linux、macOS的路径分隔符规则,避免跨环境运行时报路径格式错误。
如果模板文件存放在输出目录之外的位置,只需要调整Path.Combine的参数即可,比如读取输出目录上一级的模板文件,可以写成Path.Combine(appBasePath, "../", "MailTemplate", "template_mail.html"),方法会自动处理路径层级跳转。
内容的提问来源于stack exchange,提问作者georgetovrea
相关产品推荐
相关产品推荐

