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

发布时间 - 2026-01-09 00:00:00    点击率:
最常用且跨平台可靠的方式是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


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


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  网站建设保证美观性,需要考虑的几点问题!  如何快速生成可下载的建站源码工具?  Android滚轮选择时间控件使用详解  如何快速查询网址的建站时间与历史轨迹?  javascript基本数据类型及类型检测常用方法小结  如何在橙子建站上传落地页?操作指南详解  如何在香港服务器上快速搭建免备案网站?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  Laravel如何使用Sanctum进行API认证?(SPA实战)  canvas 画布在主流浏览器中的尺寸限制详细介绍  js实现获取鼠标当前的位置  如何快速打造个性化非模板自助建站?  如何注册花生壳免费域名并搭建个人网站?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  如何利用DOS批处理实现定时关机操作详解  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  利用vue写todolist单页应用  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  高端企业智能建站程序:SEO优化与响应式模板定制开发  怎样使用JSON进行数据交换_它有什么限制  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  Laravel如何使用.env文件管理环境变量?(最佳实践)  LinuxCD持续部署教程_自动发布与回滚机制  微信公众帐号开发教程之图文消息全攻略  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  利用python获取某年中每个月的第一天和最后一天  香港服务器租用每月最低只需15元?  太平洋网站制作公司,网络用语太平洋是什么意思?  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  非常酷的网站设计制作软件,酷培ai教育官方网站?  如何用低价快速搭建高质量网站?  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  浅谈redis在项目中的应用  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  做企业网站制作流程,企业网站制作基本流程有哪些?  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  如何确保FTP站点访问权限与数据传输安全?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  公司门户网站制作流程,华为官网怎么做?  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  bootstrap日历插件datetimepicker使用方法  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网