.NET Core发布后运行获取的目录路径与VS调试时不一致
问题原因
单文件自包含发布的.NET Core/.NET 5+ 应用启动时,会将所有内嵌的程序集资源解压到系统临时目录下运行,你原本使用的Assembly.GetExecutingAssembly().Location获取的是程序集运行时实际加载的磁盘路径,因此会返回临时目录路径,而非你存放exe的实际目录。
正确获取exe所在目录的方案
方案1:使用
AppContext.BaseDirectory(兼容所有.NET Core/.NET 版本,最推荐)
该属性始终返回应用程序的根部署目录,也就是你的exe文件所在的目录,不受单文件发布、调试运行的影响。
代码示例:string currentFolder = AppContext.BaseDirectory;方案2:使用
Environment.ProcessPath(适用于.NET 5+ 版本)
直接获取当前进程对应的exe文件的完整路径,再提取目录即可。
代码示例:string currentFolder = Path.GetDirectoryName(Environment.ProcessPath);
注意事项
不要使用Directory.GetCurrentDirectory()来获取exe所在目录,该方法返回的是程序的工作目录:如果你从cmd、快捷方式等位置启动程序时指定了不同的工作目录,该方法返回的结果会和exe实际存放目录不一致。如果你的需求是读取执行命令时当前目录下的txt文件,才选择该方法。
内容的提问来源于stack exchange,提问作者Ismail Hmama
相关产品推荐
相关产品推荐

