.NET 程序程序路径问题

获取应用程序相关的路径或文件名

通过 Assembly 类

官方文档说明:表示一个程序集,它是一个可重用、无版本冲突并且可自我描述的公共语言运行时应用程序构建基块。

1
2
3
4
5
6
7
var t = Assembly.GetEntryAssembly().Location;
Console.WriteLine(t);

// 在 .NET Framework 下的命令行应用程序输出
// 输出: D:\Test\Test.exe
// 在 .NET Core 下的命令行应用程序输出
// 输出: D:\Test\Test.dll

获取默认应用程序域中的进程可执行文件。 在其他的应用程序域中,这是由 ExecuteAssembly(String) 执行的第一个可执行文件。也就是应用程序运行的第一个可执行文件。

通过 AppDomain 类

官方文档说明:表示应用程序域,它是一个应用程序在其中执行的独立环境。也即获取当前程序(可执行文件)运行的根目录

1
2
3
4
5
var t = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
var t = AppDomain.CurrentDomain.BaseDirectory;
Console.WriteLine(t);

// 输出: D:\Test\
  • CurrentDomain 获取当前 Thread 的当前应用程序域。

  • SetupInformation 获取此实例的应用程序域配置信息。

  • ApplicationBase 获取或设置包含该应用程序的目录的名称。

  • BaseDirectory 获取根目录。

通过 Process 类

官方文档说明:提供对本地和远程进程的访问权限并使你能够启动和停止本地系统进程。

1
2
3
4
var t = Process.GetCurrentProcess().MainModule.FileName;
Console.WriteLine(t);

// 输出: D:\Test\Test.exe
  • GetCurrentProcess() 获取新的 Process 组件并将其与当前活动的进程关联。

  • MainModule 获取关联进程的主模块。

  • FileName 获取模块的完整路径。

通过 Directory 类

公开用于通过目录和子目录进行创建、移动和枚举的静态方法

1
2
3
4
var t = Directory.GetCurrentDirectory();
Console.WriteLine(t);

// 输出: D:\Test
  • GetCurrentDirectory() 获取应用程序的当前工作目录(获取的是一个文件夹的全部路径名称他不包含最后的”\“)。

通过 IWebHostEnvironment 接口

在 ASP.Net Core Web 应用程序中,我们可以通过注入的方式,获取 IWebHostEnvironment 对象,通过他的相应属性获取路径。

1
2
3
4
5
6
7
8
9
10
11
12
public class HomeController : Controller
{
private readonly IWebHostEnvironment _webHostEnvironment;
public HomeController(IWebHostEnvironment webHostEnvironment)
{
this._webHostEnvironment = webHostEnvironment;
}
public async Task<IActionResult> UploadImg()
{
string path = _webHostEnvironment.ContentRootPath;
}
}
  • ContentRootPath 获取主机根目录

路径的拼接

获取应用程序的某个配置文件

1
2
var rootPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
var testPath = Path.Combine(rootPath, "config", "test.conf");
  • Path.Combine() 通过此静态方法可以拼接文件目录,并且这种方法是可跨平台使用的。