在Mono C#CLI应用程序中获取捆绑包的路径
本文关键字:路径 获取 Mono C#CLI 应用程序 | 更新日期: 2023-09-27 18:29:38
我需要检索使用mkbundle --static
生成的应用程序可执行文件的完整路径(最多到目录)。这是我在OSX上测试的CLI应用程序,假设可执行文件位于/usr/local/bin/
。
可能会更加复杂(但我真的不知道),因为我想从任何目录运行该实用程序,所以我将上述路径添加到$PATH
环境变量中(在这种情况下,它已经存在)。
现在,假设应用程序是在~/dir1/dir2/
时启动的,并假设它打印Application.StartupPath
。这产生了路径CCD_ 6。相反,我希望始终检索启动应用程序的real目录,即/usr/local/bin/
。
有没有办法实现这一点(最好是以独立于平台的方式)?
我使用的Xamarin Studio配置了Mono/.NET 4.5和C#6.0。
更新:获取typeof(Program).Assembly.Location
也没有多大帮助。
我的意思是,当我只运行正常的应用程序可执行文件(在构建过程中生成)时,它工作得很好。
然而,如果我运行一个用mkbundle --static
制作的捆绑包,Location
只提供了可执行文件名App.exe
,而没有任何先前的路径。
可能它只是显示束内的相对路径。有没有什么方法可以找到包裹本身的路径?。。
我发现唯一可靠的方法(可能不是最快的方法)是通过Process
:
Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)
对于在程序集中定义的类型(它是应用程序的一部分),您可以通过执行以下操作来找到它的位置:
string location = typeof(Foo).Assembly.Location;
这将为您提供.dll或.exe的完整路径,具体取决于Foo类型的定义位置。如果您只需要该目录,则可以使用Path.GetDirectoryName。
string directory = System.IO.Path.GetDirectoryName(location);
以上内容应适用于Mono和Windows。