具有单文件可执行文件的 .NET 5.0 Linux 中的原始程序集位置
Original assembly location in .NET 5.0 Linux with Single-File Executable
我在 Windows 上找到了很多与 .NET Core 3.1 和 .NET 5.0 相关的答案,但到目前为止一直找不到如何获取使用单文件可执行文件时,Linux 上 .NET Core 下的原始程序集位置。鉴于系统的行为不同,我认为这可能是 .NET 5 中的一个错误,但同时我需要一个解决方法。请注意,在我的场景中,当前目录是 而不是 原始可执行文件所在的位置,即使我不更改它,我也无法控制它(无论如何这是一个 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
我需要找到原始代码位置,而不是单文件可执行文件解压到的位置。我如何获得这些最基本的信息?是否没有独立于平台和设置的方法来执行此操作(真的应该是)?
当您将应用程序发布为单个可执行文件table 时,一些与 Assembly 相关的 API 将无法工作,这不是错误。
它记录在这里:
https://docs.microsoft.com/en-us/dotnet/core/deploying/single-file#api-incompatibility
您会在 table 中看到当 运行 在单个 executable 文件中时 Assembly.Location
将始终 return 空字符串。
正如该文档中所建议的那样,您可以调用 Environment.GetCommandLineArgs()
并计算字符串数组结果中第一项的值。
我在 Windows 上找到了很多与 .NET Core 3.1 和 .NET 5.0 相关的答案,但到目前为止一直找不到如何获取使用单文件可执行文件时,Linux 上 .NET Core 下的原始程序集位置。鉴于系统的行为不同,我认为这可能是 .NET 5 中的一个错误,但同时我需要一个解决方法。请注意,在我的场景中,当前目录是 而不是 原始可执行文件所在的位置,即使我不更改它,我也无法控制它(无论如何这是一个 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
我需要找到原始代码位置,而不是单文件可执行文件解压到的位置。我如何获得这些最基本的信息?是否没有独立于平台和设置的方法来执行此操作(真的应该是)?
当您将应用程序发布为单个可执行文件table 时,一些与 Assembly 相关的 API 将无法工作,这不是错误。
它记录在这里: https://docs.microsoft.com/en-us/dotnet/core/deploying/single-file#api-incompatibility
您会在 table 中看到当 运行 在单个 executable 文件中时 Assembly.Location
将始终 return 空字符串。
正如该文档中所建议的那样,您可以调用 Environment.GetCommandLineArgs()
并计算字符串数组结果中第一项的值。