c# - 在 Mono C# CLI 应用程序中获取包的路径

标签 c# .net reflection path mono

我需要检索使用 mkbundle --static 创建的应用程序可执行文件的完整路径(直至目录)。这是我在 OSX 上测试的 CLI 应用程序,假设可执行文件位于 /usr/local/bin/

事情可能更复杂(但我真的不知道)因为我想从任何目录运行该实用程序,所以我将以上路径添加到$PATH 环境变量(在本例中,它已经存在)。

现在,假设应用程序在 ~/dir1/dir2/ 处启动,并假设它打印 Application.StartupPath。这会产生路径 ~/dir1/dir2/。相反,我希望始终检索启动应用程序的真实目录,即/usr/local/bin/

有什么方法可以实现这一点(最好是与平台无关的方式)?

我使用配置了 Mono/.NET 4.5 和 C# 6.0 的 Xamarin Studio。

更新:获取 typeof(Program).Assembly.Location 也没有多大帮助。

我的意思是,当我只运行正常的应用程序可执行文件(在构建过程中生成)时,它运行良好。

但是,如果我运行一个使用 mkbundle --static 制作的包,Location 只给出可执行文件名称 App.exe 而没有任何优先路径。

可能它只是显示包内的相对路径。有什么办法可以获得包本身的路径吗?..

最佳答案

我发现唯一可靠的方法(虽然可能不是最快的方法)是通过 Process:

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

关于c# - 在 Mono C# CLI 应用程序中获取包的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34691124/

相关文章:

c# - 使用 Linq 将项目移动到列表底部

c# - 如何使用 Roslyn 确定 XML 文档注释中 cref 的类型?

java - 从 JDK 访问非公共(public)(java 原生)类 (7)

go - 从Go结构中提取标签作为reflect.Value

java - 这个反射式 Java 例程可以加速吗?

c# - 将 List<int> 从 javascript 传递到 Controller

c# - 防止嵌套对象的 mongodb c# 驱动程序将 id 序列化为 _id

c# - .NET 中最精确的计时器是什么?

c# - 如何在 C# 中创建一个 List<int> 数组?

.net - 如何保护我的 .NET 应用程序免受 DLL 劫持?