14

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

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

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

4

2 回答 2

34

以下似乎为您提供了原始可执行文件的路径:

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
于 2019-10-02T20:09:11.507 回答
4

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

于 2019-09-27T18:17:44.230 回答