【问题标题】:Reliably get location of bundled executable on Linux [duplicate]在 Linux 上可靠地获取捆绑可执行文件的位置 [重复]
【发布时间】:2019-08-25 17:31:45
【问题描述】:

我正在编写一个 C# 应用程序,它正在编译并与 Mono 的 mkbundle 捆绑,然后运行。

我正在尝试访问正在运行可执行文件的文件夹,当我使用 ./example 从其所在目录运行应用程序时,该文件夹有效。但是,当从另一个目录相对运行它时,例如../Builds/example,它会返回错误的目录,而不是返回执行它的位置。

这一切都可以在 Windows 上完美运行,但我也需要它也可以在 Linux 上运行。

我之前尝试过的方法是:

  • AppDomain.Current.BaseDirectory
  • Path.GetDirectoryName(Assembly.ExecutingAssembly().Location)(也试过EntryAssembly

所有这些都返回不正确的目录,而不是可执行文件的实际位置。

【问题讨论】:

  • 这是 Mono 的一个问题——他们对该 API 的实现可能是不确定的。颂。您可能需要为 Mono 设计一个解决方法。但首先,看看 mkbundle 的输出到底是怎样的。例如。是否是运行临时二进制文件的脚本等。这可能会给您提示解决方法可能是什么。您还可以查看 Mono 的来源,看看那里是否存在明显的问题。可能是 mkbundle 与 Mono 的 .NET 实现交互的问题。
  • 根据重复问题的答案:System.Reflection.Assembly.GetExecutingAssembly().CodeBase 将返回程序集的“永久”路径。 试试看。
  • @KubaOber 这也失败了。问题是 Mono 的 mkbundle 实现在执行目录中创建了一个临时可执行文件,所以我不确定如何解决这个问题。

标签: c# directory mono


【解决方案1】:

我找到了一种最可靠的方法来找到mkbundle 可执行文件的路径,但是我不确定这是最佳解决方案。

Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)

【讨论】:

    猜你喜欢
    • 2014-04-18
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    相关资源
    最近更新 更多