信息发布→ 登录 注册 退出

Avalonia如何获取当前应用的运行路径 Avalonia程序路径获取

发布时间:2026-01-09

点击量:
最常用且跨平台可靠的方式是AppDomain.CurrentDomain.BaseDirectory,返回应用主程序集所在目录;单文件发布时需改用Path.GetDirectoryName(Environment.ProcessPath)获取原始路径。

在 Avalonia 中获取当前应用的运行路径,最常用且跨平台可靠的方式是通过 AppDomain.CurrentDomain.BaseDirectoryAssembly.GetExecutingAssembly().Location,但要注意两者含义不同——前者是应用主目录(即启动时的工作上下文),后者是当前程序集所在的物理路径。

推荐方式:使用 AppDomain.BaseDirectory

这是最接近传统 WinForms/WPF 中 Application.StartupPath 的等价方案,适用于绝大多数场景(如读取同级配置文件、资源文件):

  • 返回值:应用主程序集所在目录的完整路径,末尾带反斜杠(Windows)或正斜杠(Linux/macOS)
  • 稳定性高:不受当前工作目录(Directory.GetCurrentDirectory())影响,也不依赖调用栈
  • 代码示例
C#

string appPath = AppDomain.CurrentDomain.BaseDirectory;

备选方式:通过 Assembly 获取主程序集路径

若需精确获取 .dll.exe 文件本身的位置(比如要读取同目录下的 JSON 配置),可用:

  • Assembly.GetEntryAssembly()?.Location —— 获取入口程序集(如 AvaloniaApp.dll 或 MyApp.exe)的完整文件路径
  • Assembly.GetExecutingAssembly().Location —— 获取当前代码所在程序集路径(注意:若逻辑封装在独立类库中,可能不是主应用路径)
  • 建议加空值检查,因为 .NET Core/.NET 5+ 中 GetEntryAssembly() 在某些宿主环境(如 dotnet watch)下可能返回 null

安全写法示例:

C#

string? exePath = Assembly.GetEntryAssembly()?.Location;
string appDir = exePath != null ? Path.GetDirectoryName(exePath) : AppDomain.CurrentDomain.BaseDirectory;

不推荐方式:Directory.GetCurrentDirectory()

该方法返回的是进程的“当前工作目录”,它可被外部修改(如命令行启动时指定路径、IDE 运行配置里设置 Working Directory),**不可靠**,仅适合临时文件或用户显式指定路径的场景。

补充说明:Avalonia 特殊情况(如单文件发布)

使用 dotnet publish -p:PublishSingleFile=true 发布时:

  • BaseDirectory 指向临时解压目录(如 /tmp/.net/MyApp/xxx/),不是原始发布路径
  • 若需访问原始发布路径,可改用 Environment.ProcessPath(.NET 5+)获取启动进程路径,再用 Path.GetDirectoryName
  • 示例:Path.GetDirectoryName(Environment.ProcessPath)

基本上就这些。日常开发优先用 AppDomain.CurrentDomain.BaseDirectory,单文件部署时留意临时目录问题,按需切换到 Environment.ProcessPath

标签:# NULL  # 再用  # 不受  # 适用于  # 也不  # 若需  # 这是  # 的是  # 启动时  # 最常用  # 主程序  # wpf  # ide  # location  # Directory  # 封装  # linux  # String  # cos  # c#  # 配置文件  # win  # 解压  # macos  # ai  #   # mac  # app  # windows  # json  # js  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!