1. 程式人生 > 其它 >.NET Core 之 Environment.CurrentDirectory 坑

.NET Core 之 Environment.CurrentDirectory 坑

線上突然報錯了

調查程式碼

最終解決

Environment.CurrentDirectory換成了AppContext.BaseDirectory

原因

程序 A 呼叫程序 B,A 與 B不在同一路徑下,B 中使用Environment.CurrentDirectory 獲取當前路徑,本以為獲取的路徑應為 B 所在目錄,結果證明,獲取路徑為 A 路徑。
通過程式A啟動B,報錯。但是通過單獨啟動程式B正常。
後來發現System.Environment.CurrentDirectory確實是獲取當前目錄沒錯,但是如果A程式呼叫B程式,當B程式裡使用了System.Environment.CurrentDirectory獲取目錄。那麼這個B程式裡獲取的這個目錄就不再是B的應用程式所在目錄了;而變成了A所在的目錄了。

後來發現很多網友和我遇到過一樣的問題。

下面引用一下網友寫的文章:
https://www.cnblogs.com/soundcode/p/13987007.html
https://blog.csdn.net/albert528108/article/details/102958457

// 獲取程式的基目錄。
System.AppDomain.CurrentDomain.BaseDirectory
// 獲取模組的完整路徑。
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
// 獲取和設定當前目錄(該程序從中啟動的目錄)的完全限定目錄。
System.Environment.CurrentDirectory
// 獲取應用程式的當前工作目錄。
System.IO.Directory.GetCurrentDirectory()
// 獲取和設定包括該應用程式的目錄的名稱。
System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
// 獲取啟動了應用程式的可執行檔案的路徑。
System.Windows.Forms.Application.StartupPath
// 獲取啟動了應用程式的可執行檔案的路徑及檔名
System.Windows.Forms.Application.ExecutablePath
我以前寫的程式碼中獲取當前路徑基本上都是使用的System.Environment.CurrentDirectory。