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

How to get actual path to executable when using .netcore 3.0 and using the /p:PublishSingleFile=true flag?

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

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

编辑:所以它吐出的随机目录似乎实际上指向我的应用程序的解压版本,该版本不包含其他目录中的重要资源。

您正在获取实际的可执行文件路径。你只是不明白发生了什么。 使用 PublishSingleFile 不会生成单个文件,该文件在执行时完全按照软件的编程方式执行。实际发生的是带有此标志的发布生成一个包含所有文件的打包版本的文件,该文件在执行时将它们解压缩到 /var/tmp/.net 的子目录中,然后执行它。因此,如果您在发布过程之后将配置移动到发布目录,当您部署并尝试 运行 时,它们不会自动进入可执行位置。

以下似乎给出了您之后的原始可执行文件路径:

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