C# 專案中使用 ConfigurationManager 讀取 App.config 失敗,截圖顯示配置檔結構、讀取代碼與運行時異常/空值。

| 原因 | 檢查點 | 解決 |
|---|---|---|
| 1. 缺少引用 | 專案 → 參考 → System.Configuration | 右鍵參考 → 加入參考 → 組件 → Framework → 勾選 System.Configuration |
| 2. 命名空間 | using System.Configuration; | 頂部加入 using |
| 3. 配置節點路徑錯誤 | appSettings vs connectionStrings vs 自定義 section | ConfigurationManager.AppSettings["key"] 只讀 <appSettings> 下的 <add key="" value="" /> |
| 4. 輸出目錄無配置檔 | bin/Debug/App.config → 實際為 專案名.exe.config | App.config 屬性 → 複製到輸出目錄 → 「如果較新則複製」 |
| 5. 專案類型不匹配 | Class Library / ASP.NET Core / .NET Core | 類庫無 App.config,需宿主專案 (exe/web) 提供;.NET Core 用 appsettings.json + IConfiguration |
using System.Configuration;
// 讀取 appSettings
string ip = ConfigurationManager.AppSettings["ServerIP"]; // 若 key 不存在回傳 null
int port = int.Parse(ConfigurationManager.AppSettings["Port"] ?? "8080");
// 讀取 connectionStrings
string connStr = ConfigurationManager.ConnectionStrings["MyDb"]?.ConnectionString;
string provider = ConfigurationManager.ConnectionStrings["MyDb"]?.ProviderName;
// appsettings.json
{
"ServerIP": "127.0.0.1",
"Port": 8080,
"ConnectionStrings": { "MyDb": "Server=...;Database=...;" }
}
// 程式碼
using Microsoft.Extensions.Configuration;
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
string ip = config["ServerIP"];
int port = config.GetValue("Port");
string connStr = config.GetConnectionString("MyDb");
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile 確認實際載入的 .config 路徑bin/Debug/專案名.exe.config 內容是否與源碼一致ConfigurationManager.RefreshSection("appSettings") 強制重載App.config 讀取失敗 90% 是缺少 System.Configuration 引用、節點路徑錯誤、輸出目錄無配置檔。.NET Core 專案請改用 appsettings.json + IConfiguration,勿沿用 App.config 模式。