You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取适配独立EXE与dotnet命令启动的当前程序路径?

适配单文件EXE与dotnet命令启动的程序路径获取方法

可以通过结合Assembly.GetEntryAssembly()和Environment.ProcessPath实现跨场景的路径获取,核心思路是根据运行场景自动切换获取逻辑:

实现代码

using System;
using System.Reflection;

public static class ApplicationPathHelper
{
    public static string GetApplicationFilePath()
    {
        var entryAssembly = Assembly.GetEntryAssembly();
        
        // 非单文件发布场景(含dotnet xxx.dll启动、普通独立EXE)
        if (entryAssembly != null && !string.IsNullOrEmpty(entryAssembly.Location))
        {
            return entryAssembly.Location;
        }

        // 单文件发布EXE场景
        var processPath = Environment.ProcessPath;
        if (!string.IsNullOrEmpty(processPath))
        {
            return processPath;
        }

        // 极端异常场景,可根据业务需求调整处理逻辑
        throw new InvalidOperationException("无法获取当前应用程序的文件路径");
    }
}

逻辑说明

  • 非单文件场景:当通过dotnet <program.dll>启动,或普通编译的独立EXE运行时,Assembly.GetEntryAssembly().Location会直接返回程序集(dll/exe)的实际磁盘路径,这是最准确的程序本身路径。
  • 单文件EXE场景:单文件发布的应用在运行时,Assembly.GetEntryAssembly().Location会返回空字符串(因为程序集被嵌入到单文件EXE中,运行时无独立磁盘文件),此时用Environment.ProcessPath获取当前运行的EXE路径,这是.NET 6+官方推荐的单文件路径获取方式。
  • 边界处理:加入null判断避免空引用异常,极端场景下可选择抛出异常或返回默认值,按需调整即可。

场景验证

  • 单文件EXE:执行dotnet publish -r win-x64 -p:PublishSingleFile=true发布后,运行生成的EXE,方法返回该EXE的完整路径。
  • dotnet命令启动:执行dotnet MyApp.dll,方法返回MyApp.dll的完整路径。
  • 普通独立EXE:常规发布的EXE运行时,两种方式都能获取正确路径,此处优先返回程序集路径,结果与Environment.ProcessPath一致。

内容的提问来源于stack exchange,提问作者Iain Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:50:25