在這篇文章中網友的留言吸引了我的注意,.NET Framework 提供了至少三種取得檔案目前位置的方法:
AppDomain.CurrentDomain.BaseDirectory
System.Reflection.Assembly.GetExecutingAssembly().Location
System.IO.Directory.GetCurrentDirectory()
我還真不知道它們具體上的差異,趁這個機會做了一下實驗順便記錄下來,也提供給各位朋友參考。
我有一個 CurrentDirectoryTestLibrary.dll
以及一個 CurrentDirectoryTestConsole.exe
,裡面某處都有實作一個 ShowResult()
方法,分別印出在各自組件底下 AppDomain.CurrentDomain.BaseDirectory、System.Reflection.Assembly.GetExecutingAssembly().Location、System.IO.Directory.GetCurrentDirectory() 這三個的結果。
然後由 CurrentDirectoryTestConsole.exe 動態載入 CurrentDirectoryTestLibrary.dll 透過 Reflection 的方式呼叫 CurrentDirectoryTestLibrary.dll 裡面的 ShowResult() 方法,程式碼如下:
接著我透過命令提示字元,在 C:\ 去執行位於 D:\ 的 CurrentDirectoryTestConsole.exe,這樣就可以看出這三種檔案目前位置取得方法的差異。
可以看到 AppDomain.CurrentDomain.BaseDirectory 是 CurrentDirectoryTestConsole.exe 的位置,而 System.Reflection.Assembly.GetExecutingAssembly().Location 則是各自組件的位置,最後 System.IO.Directory.GetCurrentDirectory() 全部都是 C:\,得到一個結論:
- AppDomain.CurrentDomain.BaseDirectory:獲得的是
執行的應用程式在哪裡
- System.Reflection.Assembly.GetExecutingAssembly().Location:獲得的是
目前執行的組件在哪裡
- System.IO.Directory.GetCurrentDirectory():獲得的是
在哪裡下執行指令