C# 当使用.netcore 3.0并使用/p:PublishSingleFile=true标志时,如何获取可执行文件的实际路径?

C# 当使用.netcore 3.0并使用/p:PublishSingleFile=true标志时,如何获取可执行文件的实际路径?,c#,.net-core,ubuntu-16.04,systemd,netcoreapp3.0,C#,.net Core,Ubuntu 16.04,Systemd,Netcoreapp3.0,我最近将一个应用程序升级到dotnet core 3,并在构建过程中开始使用PublishSingleFile标志。通过这两个更改,找到可执行路径的方式发生了变化。现在,我没有得到可执行文件所在的路径,而是被重定向到/var/tmp/.net/中的一个随机目录,在那里我可以得到/opt/appdir/ Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)); 编辑:看起

我最近将一个应用程序升级到dotnet core 3,并在构建过程中开始使用PublishSingleFile标志。通过这两个更改,找到可执行路径的方式发生了变化。现在,我没有得到可执行文件所在的路径,而是被重定向到
/var/tmp/.net/
中的一个随机目录,在那里我可以得到
/opt/appdir/

Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location));

编辑:看起来它所吐出的随机目录实际上指向了我的应用程序的一个未打包版本,它不包含其他目录中的重要资源。

您得到的是实际的可执行路径。你只是不明白发生了什么。
使用PublishSingleFile不会生成一个单独的文件,该文件在执行时与软件编程时的功能完全相同。实际发生的情况是,带有此标志的发布生成一个包含所有文件的打包版本的文件,执行时将其解压到
/var/tmp/.net
的a子目录中,然后执行它。因此,如果您在发布过程后将配置移动到发布目录中,则在部署并尝试运行它时,它们不会自动将其移动到可执行文件位置。

以下内容似乎给出了您所追求的原始可执行文件的路径:

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName