首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 取得應用程式路徑的 8 種方法與適用場景完整對照

     編輯:關於C#

路徑取得方法總覽

方法回傳內容含檔名適用專案類型備註
Environment.CurrentDirectory目前工作目錄否所有可被 Directory.SetCurrentDirectory 改變
Application.StartupPath啟動 EXE 所在目錄否WinForms需參考 System.Windows.Forms
Process.GetCurrentProcess().MainModule.FileName完整 EXE 路徑是所有需 using System.Diagnostics;受限於權限
AppDomain.CurrentDomain.BaseDirectory應用程式域基底目錄否所有ASP.NET / Console / WinForms 通用,**推薦首選**
Directory.GetCurrentDirectory()目前工作目錄否所有同 Environment.CurrentDirectory
AppDomain.CurrentDomain.SetupInformation.ApplicationBase應用程式基底目錄否所有同 BaseDirectory,較底層
Assembly.GetExecutingAssembly().Location當前執行組件完整路徑是所有若為 DLL 則回傳 DLL 路徑,非 EXE
Application.ExecutablePath啟動 EXE 完整路徑是WinForms同 Process.MainModule,但更簡潔

各類型專案推薦做法

.NET Core / .NET 5+ / ASP.NET Core(通用最佳)

// 專案根目錄(發布後為 exe 同層)
string baseDir = AppContext.BaseDirectory;        // 等同 AppDomain.BaseDirectory
string exePath = Environment.ProcessPath;         // .NET 6+ 取得 EXE 完整路徑

WinForms / WPF (.NET Framework)

// 只需目錄
string dir = Application.StartupPath;             // WinForms
// 或
string dir = AppDomain.CurrentDomain.BaseDirectory; // 通用

// 需完整 EXE 路徑
string exe = Application.ExecutablePath;          // WinForms 專用
// 或
string exe = Process.GetCurrentProcess().MainModule.FileName;

Class Library / 單元測試

// 取得 DLL 所在目錄
string dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

實務常見陷阱

情境錯誤做法正確做法
讀取設定檔File.ReadAllText("config.json")File.ReadAllText(Path.Combine(AppContext.BaseDirectory, "config.json"))
影子複製測試用 Assembly.Location用 AppDomain.BaseDirectory 或 AppContext.BaseDirectory
ClickOnce 部署假設路徑固定用 ApplicationDeployment.CurrentDeployment.DataDirectory
Windows ServiceEnvironment.CurrentDirectory 為 System32用 AppContext.BaseDirectory

路徑操作最佳實務

// 永遠用 Path.Combine 組合路徑,避免手工拼接 \ 或 /
string configPath = Path.Combine(AppContext.BaseDirectory, "Config", "appsettings.json");

// 取得專案根目錄(開發時),發布後自動轉為輸出目錄
string projectRoot = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, @"..\..\..\"));

總結

現代 .NET 專案首選 AppContext.BaseDirectory(目錄)與 Environment.ProcessPath(.NET 6+,完整路徑),兩者跨平台、跨專案類型、不受影子複製影響。舊專案相容可用 AppDomain.CurrentDomain.BaseDirectory。切記:永遠不要信任「目前工作目錄」,它隨使用者啟動方式、排程器、服務管理器隨時改變。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved