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

C#中Environment.CurrentDirectory属性的工作原理是什么?

Environment.CurrentDirectory 工作原理解答

核心定义

Environment.CurrentDirectory 是用于获取或设置当前进程关联的工作目录的属性,它的取值和程序可执行文件自身的存放路径没有必然绑定关系,默认继承自启动当前进程的父进程的工作目录,也可以在进程运行过程中被主动修改。

场景对应解释

  • IDE直接运行场景
    Visual Studio 等 IDE 启动调试程序时,默认会将待调试程序的工作目录设置为项目编译输出目录(也就是你案例中 exe 所在的 bin\Debug 文件夹),因此此时输出的就是该路径。你也可以在项目属性的「调试」选项卡中手动修改「工作目录」参数,自定义程序启动时的工作目录值。
  • 控制台手动启动场景
    cmd/Powershell 窗口本身就是独立进程,你在控制台中通过 cd 等命令切换到的路径就是控制台进程当前的工作目录。直接输入 exe 路径启动程序时,新启动的程序进程会继承父进程(当前控制台)的工作目录,因此输出的就是你执行启动命令时控制台所处的路径。
  • 第三方程序调用启动场景
    用 Process.Start 启动新进程时,默认会将新进程的工作目录继承为调用方进程的当前工作目录。你案例中 ConsoleApp2 运行时的工作目录是自身的 bin\Debug 文件夹,因此被调用的 ConsoleApp1 获取到的工作目录就是这个路径。如果需要指定被调用程序的工作目录,可以通过 ProcessStartInfo 显式设置:
    Process.Start(new ProcessStartInfo(@"C:\Users\Admin\source\repos\FeaturesTest\ConsoleApp1\bin\Debug\ConsoleApp1.exe")
    {
        WorkingDirectory = @"C:\自定义的工作目录路径"
    });
    

常见用法补充

如果你需要固定获取程序可执行文件自身的存放目录,不要依赖 Environment.CurrentDirectory,推荐使用以下不受工作目录影响的方案:

  • .NET Core / .NET 5+ 通用方案:AppContext.BaseDirectory
  • 全平台兼容方案:Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:12:03