0

0

c# 如何获取程序运行目录

幻夢星雲

幻夢星雲

发布时间:2026-03-02 09:12:12

|

354人浏览过

|

来源于php中文网

原创

appdomain.currentdomain.basedirectory 是最可靠方式获取程序运行目录,返回带末尾反斜杠的完整路径;它不受工作目录变更影响,比 environment.currentdirectory 和 assembly.location 更稳定,推荐新项目优先用 appcontext.basedirectory。

c# 如何获取程序运行目录

获取当前程序的运行目录(不是安装目录)

在 C# 中,AppDomain.CurrentDomain.BaseDirectory 是最可靠的方式获取程序实际运行时所在的目录(即启动时工作目录下的可执行文件所在路径),它不受 Environment.CurrentDirectory 变更影响,也不依赖于安装位置。

  • 适用于控制台、Windows Forms、WPF 等所有 .NET 应用
  • 返回的是带末尾反斜杠的完整路径,例如:"C:\MyApp\"
  • Assembly.GetExecutingAssembly().Location 不同:后者返回当前 DLL 的路径,可能不是主程序目录(比如从插件调用时)
  • Application.StartupPath(仅 WinForms)相比,BaseDirectory 更通用且跨平台兼容(.NET Core/.NET 5+ 同样有效)

为什么不用 Environment.CurrentDirectory

Environment.CurrentDirectory 返回的是当前工作目录,它可能被代码、第三方库甚至用户手动修改过(比如调用了 Directory.SetCurrentDirectory(...)),不能代表程序本身的位置。

  • 常见错误:在调试时它恰好等于运行目录,上线后因服务启动方式不同(如 Windows 服务默认工作目录是 C:\Windows\System32)导致读取配置失败
  • 即使没主动改,某些 IDE(如 VS)或宿主环境(如 IIS Express)也会设置不同的初始工作目录
  • 它不反映程序集物理位置,只反映“当前命令行上下文”

AppContext.BaseDirectoryBaseDirectory 有什么区别?

.NET Core 3.0+ 引入了 AppContext.BaseDirectory,它和 AppDomain.CurrentDomain.BaseDirectory 在大多数场景下行为一致,但语义更清晰 —— 明确表示“当前应用上下文的基目录”,且在单文件发布(single-file publish)模式下也能正确返回提取后的临时目录(而非打包前的路径)。

沙之丘企业网站程序3.5
沙之丘企业网站程序3.5

沙之丘企业网站程序是一个以asp.net(C#) 4.0 +access进行开发的企业网站源码。主要功能:1、产品、设备、新闻系统2、留言信息直接发邮件到相关部门3、所有链接都以一级目录显示更好的权重4、其他信息扩展,可以增加如:人事招聘,公司介绍,地图,联系我们等5、带有商品和设备的搜索功能6、模板动态化方便扩展模板7、简体繁体选择显示运行环境:windows 2003或者更高windows服务

下载
  • 推荐新项目优先用 AppContext.BaseDirectory,尤其使用 .NET 5/6+ 或启用单文件部署时
  • 旧项目维持 AppDomain.CurrentDomain.BaseDirectory 即可,两者在非单文件场景下结果相同
  • 注意:AppContext.BaseDirectory 在 .NET Framework 中不可用,需条件编译或运行时判断

实际使用示例

下面这段代码安全地获取运行目录,并拼接一个相对配置文件路径:

string appDir = AppContext.BaseDirectory;
// 或兼容旧框架:string appDir = AppDomain.CurrentDomain.BaseDirectory;
string configPath = Path.Combine(appDir, "appsettings.json");
<p>if (File.Exists(configPath))
{
// 加载配置
}

如果需要去掉末尾反斜杠,用 Path.GetDirectoryName(appDir) 并不推荐 —— 因为 BaseDirectory 保证结尾有斜杠,直接拼接 Path.Combine 更安全;手动截断反而容易出错。

真正容易被忽略的是:当程序以“单文件”方式发布时,BaseDirectory 指向的是解压后的临时目录,不是原始发布目录。如果你把资源文件硬编码进发布包但没随单文件一起打包,运行时就会找不到 —— 这类问题往往只在生产环境暴露。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Node.js后端开发与Express框架实践
Node.js后端开发与Express框架实践

本专题针对初中级 Node.js 开发者,系统讲解如何使用 Express 框架搭建高性能后端服务。内容包括路由设计、中间件开发、数据库集成、API 安全与异常处理,以及 RESTful API 的设计与优化。通过实际项目演示,帮助开发者快速掌握 Node.js 后端开发流程。

361

2026.02.10

location.assign
location.assign

在前端开发中,我们经常需要使用JavaScript来控制页面的跳转和数据的传递。location.assign就是JavaScript中常用的一个跳转方法。通过location.assign,我们可以在当前窗口或者iframe中加载一个新的URL地址,并且可以保存旧页面的历史记录。php中文网为大家带来了location.assign的相关知识、以及相关文章等内容,供大家免费下载使用。

232

2023.06.27

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1336

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1159

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

827

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

460

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2361

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

854

2023.08.10

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

43

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 10.5万人学习

C 教程
C 教程

共75课时 | 5.1万人学习

C++教程
C++教程

共115课时 | 20.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号