他们都给出相同的结果
他们当然不会。currentDir
并且dir
两者都给你当前的工作目录——即默认情况下你的可执行文件运行的目录(但它可以在执行期间更改)。
相比之下,appBaseDir
获取path
包含执行程序集文件的目录。
为了说明它们有何不同,请考虑您有一个位于C:\bar\baz.exe
. 现在我可以通过在终端中输入以下命令链来执行应用程序:
$ md C:\foo
$ cd C:\foo
$ ..\bar\baz.exe
现在当前工作目录是C:\foo
,但应用程序的基目录是C:\bar
. 存在为启动应用程序的其他方法设置工作目录的类似方法(例如,通过快捷方式图标或以编程方式,例如通过Process.Start
)。
尽管如此,该框架仍提供了访问此信息的不同方式:
Environment.CurrentDirectory
很直接的传达了查询执行环境(一个环境变量)的意思。Directory.GetCurrentDirectory()
实际上可能在内部做同样的事情(我不知道),但它封装了这一点,而是专注于为用户提供一个用于查询目录信息的逻辑 API。
AppDomain.CurrentDomain
有关于当前AppDomain
(大致是可执行文件)的信息。从逻辑上讲,该信息的一部分是AppDomain
' 路径。相比之下,System.Reflection.Assembly
为您提供有关汇编的一般信息——这些表示 .NET 中的任何类型的二进制对象,包括 DLL 和 EXE。GetExecutingAssembly
特别是返回当前执行的程序集。你可以通过查询它的属性再次得到它的Location
路径,它给出了一个程序集文件的物理路径。