标签:defs marker lte 组合 原创 国际 使用 就是 文件
原文:四种方法获取可执行程序的文件路径(.NET Core / .NET Framework)
本文介绍四种不同的获取可执行程序文件路径的方法。适用于 .NET Core 以及 .NET Framework。
var executablePath = Assembly.GetEntryAssembly().Location;
这种方式的思路是获取入口程序集所在的路径。不过 Assembly.GetEntryAssembly()
能获取到的程序集是入口托管程序集;使用此方法会返回第一个托管程序集。
只有 .NET Framework 程序的入口才是托管程序(exe)。而对于 .NET Core 程序,如果直接发布成带环境依赖声明的 dll,那么实际运行的进程是 dotnet.exe;而如果发布成自包含的 exe 程序,其主 exe 也是一个非托管的 CLR 启动器而已,并不是托管程序集。
所以此方法适用条件:
var executablePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
这种方式的思路是获取当前 AppDomain 所在的文件夹。不过此方法也只是获取到文件夹而已,不包含文件名。
所以此方法适用条件:
当然,此方法因为不涉及到托管和非托管程序集,所以与编译结果无关,适用于 .NET Core 和 .NET Framework 程序。
var executablePath = Process.GetCurrentProcess().MainModule.FileName;
这种方式的思路是获取当前进程可执行程序的完全路径。
对于 .NET Framework 程序,其 exe 就是这个路径。
对于 .NET Core 程序来说:
所以此方法适用条件:
我在另一篇博客中提到命令行参数中包含应用程序路径:
于是我们也可以通过命令行参数来获取到可执行程序的路径。
var executablePath = Environment.GetCommandLineArgs()[0];
这种方法的效果和前面使用进程信息获取的效果是相同的,会获取到相同的可执行程序路径。
通过以上方法的说明,我们可以知道目前没有 100% 可靠的获取当前可执行程序文件路径的方法,不过可以组合多种方法达到 100% 可靠的目的。
AppDomain.CurrentDomain.SetupInformation.ApplicationBase
Process.GetCurrentProcess().MainModule.FileName
Environment.GetCommandLineArgs()[0]
dotnet.exe
,那么再通过程序集信息获取
Assembly.GetEntryAssembly().Location
我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。
如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
四种方法获取可执行程序的文件路径(.NET Core / .NET Framework)
标签:defs marker lte 组合 原创 国际 使用 就是 文件
原文地址:https://www.cnblogs.com/lonelyxmas/p/12052006.html