使用单文件可执行文件的.net 5.0 Linux中的原始汇编位置



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

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

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

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

文档如下:https://learn.microsoft.com/en-us/dotnet/core/deploying/single-file api-incompatibility

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

相关内容

  • 没有找到相关文章

最新更新