信息发布→ 登录 注册 退出

C#怎么获取当前程序路径 C#获取各种路径的方法汇总

发布时间:2025-12-16

点击量:
程序路径应使用AppContext.BaseDirectory(.NET Core/.NET 5+)或Path.GetDirectoryName(Application.ExecutablePath)(WinForms),而非Environment.CurrentDirectory;配置文件建议置于程序目录并用Path.Combine拼接访问。

c#怎么获取当前程序路径 c#获取各种路径的方法汇总

当前程序路径一般指可执行文件(.exe)所在目录,不是解决方案目录或项目目录。直接用 Application.ExecutablePathSystem.Reflection.Assembly.GetExecutingAssembly().Location 获取完整路径,再用 Path.GetDirectoryName() 提取目录即可。别用 Environment.CurrentDirectory,它可能被用户或代码修改过,不可靠。

获取当前可执行文件所在目录(最常用)

这是绝大多数场景需要的“程序路径”,比如读取同级配置文件、写日志到本地文件夹:

  • Path.GetDirectoryName(Application.ExecutablePath) —— WinForms 项目推荐,简洁稳定
  • Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) —— 控制台、WPF、类库通用,GetExecutingAssembly 返回当前运行代码所在的程序集
  • AppContext.BaseDirectory —— .NET Core / .NET 5+ 推荐,尤其在发布为单文件时更准确(注意:单文件发布下 Location 可能为空或指向临时解压路径)

获取当前工作目录(慎用)

Environment.CurrentDirectory 返回进程启动时的工作目录,不是程序文件位置。命令行中 cd 到某目录再运行 exe,这里就会是那个目录。调试时 VS 默认设为项目目录,但发布后行为不确定:

  • 仅在明确需要“用户启动上下文”时才用(如批量处理当前目录下的文件)
  • 不要用它替代程序路径,否则部署后容易出错

获取项目/源码相关路径(仅开发阶段参考)

这些路径在编译后不存在,不能用于生产环境:

QoQo QoQo

QoQo是一款专注于UX设计的AI工具,可以帮助UX设计师生成用户角色卡片、用户旅程图、用户访谈问卷等。

QoQo 172 查看详情 QoQo
  • Directory.GetCurrentDirectory() —— 同 Environment.CurrentDirectory,开发时常是项目根目录,但不保证
  • AppDomain.CurrentDomain.BaseDirectory —— 通常和 AppContext.BaseDirectory 一致,.NET Framework 时代常用,新项目优先用后者
  • typeof(Program).Assembly.Location —— 和 GetExecutingAssembly().Location 类似,但指定类型更明确,适合在类库中获取自身程序集位置

读写配置或资源文件的实用建议

路径只是手段,目标是可靠访问文件:

  • 配置文件(如 appsettings.json)建议放在程序目录,用 Path.Combine(AppContext.BaseDirectory, "appsettings.json")
  • 想让程序“自带”资源,把文件属性设为 Copy to Output Directory = Copy always,然后按相对路径读取
  • 避免硬编码绝对路径;跨平台注意用 Path.Combine() 拼接,别用 +/

基本上就这些。记住核心:要“程序放哪儿”,就用 AppContext.BaseDirectory(新项目)或 Path.GetDirectoryName(Application.ExecutablePath)(WinForms),其它路径按需谨慎选用。

以上就是C#怎么获取当前程序路径 C#获取各种路径的方法汇总的详细内容,更多请关注其它相关文章!


相关文章: excel怎么制作工资条 excel快速生成工资条的方法  使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战  单射、满射与双射的关系 一文理清所有逻辑  PHP教程:将数据库查询结果动态展示到HTML Textarea的最佳实践  Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口  手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析  优化Lar*el Docker镜像:Composer与PHP版本控制策略  微博网页版怎么开启两步验证_微博网页版账号安全两步验证设置方法  LINUX怎么安装MySQL_LINUX数据库安装配置教程  Go语言中构建可靠数据存储的原子性与持久化策略  在J*a中如何使用ForkJoinPool进行分治任务并行处理_ForkJoinPool分治并行技巧说明  zookeeper 都有哪些功能?  大麦的“候补”是什么意思 大麦候补购票规则【详解】  微信群消息显示延迟如何解决 微信群消息刷新优化方法  蛙漫移动版在线看 蛙漫手机浏览器直达入口  如何在网页中实现特定地点的随机图片展示  J*aScript打印功能_j*ascript输出控制  Django模型中自动计算可用余额的实现方法  Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换  如何使 Jest 模拟函数默认抛出错误以提高测试效率  React项目中导航栏Logo自适应布局:避免裁剪与布局溢出  html两个JS只运行一个怎么办_让双JS在html中都运行方法【技巧】  微博网页版主页入口 微博官方网站免登录访问  微信语音通话掉线如何解决 微信语音通话稳定优化方法  黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】  京东京造J1和网易云音乐氧气真无线有什么不同_国产电商蓝牙耳机音质对比  印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】  PHP表单提交后函数重复执行的解决方案:管理$_POST数据  俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达  抓大鹅解压小游戏 抓大鹅摸鱼解压入口  TikTok搜索不到用户发布内容怎么办 TikTok用户内容搜索优化方法  《铁拳8》黑皮辣妹新实机:元气满满的18岁少女!  品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程  京东单号查询入口_京东快递订单追踪入口  PHP高效扁平化嵌套数组:使用array_merge与数组解包操作符  如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门  小米Civi 4录制视频过暗_小米Civi 4亮度优化  Go语言中动态执行代码字符串的策略与实践  j*a toString()的覆盖  Lar*el 8 多关键词数据库搜索优化实践  outlook中文官网入口地址 outlook官方中文版直达首页链接  PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果  PHP教程:高效从URL路径中提取倒数第二个片段  Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】  AO3网页版合集入口 Archive of Our Own同人作品浏览指南  C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用  win11怎么清理更新缓存 Win11删除Windows Update下载文件释放空间【技巧】  J*aScript教程:根据元素文本内容动态设置背景色  126邮箱手机版登录官网2026_126手机邮箱免费入口最新 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!