.NET Core 之 Environment.CurrentDirectory 坑

线上突然报错了

.NET Core 之 Environment.CurrentDirectory 坑

调查代码

.NET Core 之 Environment.CurrentDirectory 坑

最终解决

Environment.CurrentDirectory换成了AppContext.BaseDirectory

原因

进程 A 调用进程 B,A 与 B不在同一路径下,B 中使用Environment.CurrentDirectory 获取当前路径,本以为获取的路径应为 B 所在目录,结果证明,获取路径为 A 路径。
通过程序A启动B,报错。但是通过单独启动程序B正常。
后来发现System.Environment.CurrentDirectory确实是获取当前目录没错,但是如果A程序调用B程序,当B程序里使用了System.Environment.CurrentDirectory获取目录。那么这个B程序里获取的这个目录就不再是B的应用程序所在目录了;而变成了A所在的目录了。

后来发现很多网友和我遇到过一样的问题。

下面引用一下网友写的文章:
https://www.cnblogs.com/soundcode/p/13987007.html
https://blog.****.net/albert528108/article/details/102958457

// 获取程序的基目录。
System.AppDomain.CurrentDomain.BaseDirectory
// 获取模块的完整路径。
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
// 获取和设置当前目录(该进程从中启动的目录)的完全限定目录。
System.Environment.CurrentDirectory
// 获取应用程序的当前工作目录。
System.IO.Directory.GetCurrentDirectory()
// 获取和设置包括该应用程序的目录的名称。
System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
// 获取启动了应用程序的可执行文件的路径。
System.Windows.Forms.Application.StartupPath
// 获取启动了应用程序的可执行文件的路径及文件名
System.Windows.Forms.Application.ExecutablePath
我以前写的代码中获取当前路径基本上都是使用的System.Environment.CurrentDirectory。

上一篇:Android Vendor <--> System 透过 HIDL 进程间传递 shared fd, 访问ion 共享内存


下一篇:Windows操作系统中常用的Dos命令