假设 D盘 有这么一个叫 Foo 应用程序,调用了 F盘 中的一个程序集。现在从命令行中运行 C:\Users\stg609 > D:\foo.exe (如下图所示)。
使用下面各种获取路径的方式,猜猜看每条语句返回的值是什么?
获取工作目录
Environment.CurrentDirectory
Directory.GetCurrentDirectory()
工作目录不一定是程序的路径,可能在程序运行期间会改变。
获取应用程序域目录
AppDomain.CurrentDomain.BaseDirectory (推荐,适用于各种类型应用程序)
HttpRuntime.AppDomainAppPath //只试用于 web 应用程序
承载当前应用程序的应用程序域所在的路径。
获取应用程序路径
//除桌面应用程序之外,其它类型应用程序都需要先添加对 System.Windows.Forms 的引用。
System.Windows.Forms.Application.Application.StartupPath
System.Windows.Forms.Application.Application.ExecutablePath (除了目录外还包含应用程序名称)
Request.ApplicationPath //只试用于 web 应用程序,如果当前应用程序就是网站根目录,则该值为 “/”。
获取程序集所在路径
//获取应用程序入口所在程序集的位置,如果托管程序集是从非托管应用程序中加载的,那么Assembly.GetEntryAssembly() 将返回 null,例如 asp.net 应用程序。
System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location //获取当前正在执行的程序集所在的位置,如果一个程序集通过反射等方式执行,那路径就会不同。
WEB 应用程序示例
直接通过一个实例运行后的效果看一下,上述语句的输出是什么:
答 案
是时候揭露文章刚开头的问题答案了。