2016-01-09 45 views
1

我需要檢索使用mkbundle --static製作的應用程序可執行文件的完整路徑(至目錄)。這是一個我在OSX上測試的CLI應用程序,假設可執行文件駐留在/usr/local/bin/在Mono C#CLI應用程序中獲取包的路徑

的事項可能進一步複雜化(但我真的不知道),因爲我想運行在任何目錄的效用,所以我加入$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,而不包含任何先前的路徑。

可能它只是顯示包內的相對路徑。有沒有什麼方法可以讓我得到的路徑,束本身..

回答

1

隨着組件定義的類型,它是應用程序的一部分,你可以通過做找到它的位置:

string location = typeof(Foo).Assembly.Location; 

這使你完整路徑到.dll或.exe,這取決於Foo類型的定義。然後,如果您只需要該目錄,則可以使用Path.GetDirectoryName。

string directory = System.IO.Path.GetDirectoryName(location); 

上面應該適用於Mono,也適用於Windows。

+0

感謝馬特。如果我運行'mono app.exe',但是運行使用'mkbundle --static'創建的包時不起作用。在這種情況下,它只顯示'app.exe',或許它是相對於軟件包的路徑?.. 仍然無法弄清楚如何獲取包的路徑,或者根本不可能。 – wh1t3cat1k

+0

我改變了問題主體以反映對問題的新理解。你知道什麼可以幫助我的情況? – wh1t3cat1k

+0

對不起,不知道。我懷疑你將不得不使用[native api](http://stackoverflow.com/questions/1023306/finding-current-executables-path-without-proc-self-exe)來查找當前可執行文件的路徑。 –

2

我發現可靠的唯一的事(可能不是但最快的方法)是通過Process

Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) 
相關問題