Environment.CurrentDirectory 和 AppDomain.CurrentDomain.BaseDirectory 有什么不一样???

6 阅读1分钟
  1. 环境(控制台程序+windows11+C#平台):

  2. 在项目中,我准备用System.Environment.CurrentDirectory获取程序运行的目录,然后在这个目录中读取config.txt的内容。我发现双击就程序就能运行,没有问题。

  3. 我准备用windows计划任务调用,却发现程序闪退。 我又用python调用,同样闪退。我调试了很久,最终发现找不到config.txt文件,我就很纳闷了。

  4. 查资料:System.Environment.CurrentDirectory 获取或设置当前工作目录的完整路径。该路径是进程启动时所在的目录,‌可被代码或外部进程修改‌(通过python启动程序,我确实发现System.Environment.CurrentDirectory改变了初心,不是程序所在目录了,就导致找不到config.txt)。

  5. 解决方案:用System.AppDomain.CurrentDomain.BaseDirectory代替System.Environment.CurrentDirectory。 System.AppDomain.CurrentDomain.BaseDirectory获取应用程序基目录的完整路径,通常是程序集(如 EXE)所在的目录。该路径‌不可变‌,由应用程序域初始化时确定,不受外部进程或代码修改影响‌。