具有单文件可执行文件的 .NET 5.0 Linux 中的原始程序集位置

Jam*_*mes 3 .net linux .net-core .net-5

我找到了许多与Windows上的 .NET Core 3.1 和 .NET 5.0 相关的答案,但到目前为止,还无法找到如何在使用单文件可执行文件时在Linux上获取 .NET Core 下的原始程序集位置。鉴于系统的行为不同,我认为这可能是 .NET 5 中的一个错误,但同时我需要一个解决方法。请注意,在我的场景中,当前目录不是原始可执行文件所在的位置,即使我不更改它,并且我无法控制它(无论如何,这是一个黑客 - 当前目录的目的完全不同) )。这是在这种情况下测试程序的实际输出,其中包含迄今为止我能找到的所有其他帖子中建议的属性和函数:

Directory.CurrentDirectory()=/home/ec2-user/source
typeof(Program).Assembly.Location=/root/.net/Test/jwaxs3pc.bdp/Test.dll
typeof(Program).Assembly.GetFiles() [0].Name=/root/.net/Test/jwaxs3pc.bdp/Test.dll
typeof(Program).Assembly.GetName().CodeBase=file:///root/.net/Test/jwaxs3pc.bdp/Test.dll
AppContext.BaseDirectory=/root/.net/Test/jwaxs3pc.bdp/
Directory.GetParent(System.Reflection.Assembly.GetExecutingAssembly().Location).FullName=/root/.net/Test/jwaxs3pc.bdp
Run Code Online (Sandbox Code Playgroud)

我需要找到原始代码位置,而不是单文件可执行文件解压到的位置。我如何获得这些最基本的信息?是否没有一种独立于平台和设置的方法来做到这一点(确实应该有)?

Eri*_*ono 7

当您将应用程序发布为单个可执行文件时,某些与 Assembly 相关的 API 将无法工作,这不是一个错误。

它记录在此处: https: //learn.microsoft.com/en-us/dotnet/core/deploying/single-file#api-incompatibility

您将在该表中看到,Assembly.Location在单个可执行文件中运行时,该表将始终返回空字符串。正如该文档中所建议的,您可以调用Environment.GetCommandLineArgs()并计算字符串数组结果中第一项的值。