【发布时间】: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 实现在执行目录中创建了一个临时可执行文件,所以我不确定如何解决这个问题。