雖然 VS2005 已停止支援,但許多企業系統仍在維護中。本文彙整 32 個經典錯誤訊息、成因與解決方案,涵蓋驗證、資料存取、部署、設定、偵錯環境等面向,供維護舊專案的開發者快速排查。
| # | 錯誤訊息關鍵字 | 核心成因 | 解決方案要點 |
|---|---|---|---|
| 1 | 偵測到有潛在危險的 Request.Form 值 | ASP.NET 請求驗證攔截 HTML/Script 標籤 | 頁面加 `<%@ Page ValidateRequest="false" %>` 或 `web.config |
| 2 | 在沒有任何資料時進行無效的讀取嘗試 | `SqlDataReader.Read()` 未先判斷 `HasRows` | `if (reader.Read()) { ... }` |
| 3 | 資料為空。不能對空值調用此方法或屬性 | DBNull.Value 未轉換直接呼叫 .ToString() | `Convert.ToString(obj)` 或 `obj as string ?? ""` |
| 4 | 閱讀器關閉時 FieldCount 的嘗試無效 | `SqlDataReader` 綁定後 Connection 過早關閉 | 使用 `CommandBehavior.CloseConnection` 讓 Reader 關閉時自動關閉連線,或改用 DataSet |
| 5 | 未能對應路徑 | 虛擬路徑設定錯誤 | 檢查 `web.config` 路徑鍵值,使用 `Server.MapPath` |
| 6 | Unreachable code detected | `throw`/`return` 後仍有程式碼 | 移動 `throw`/`return` 至區塊末尾 |
| 7 | 索引超出範圍 | GridView `DataKeyNames` 未設或 `Cells` 索引錯誤 | 設定 `DataKeyNames`,檢查 `e.Item.Cells.Count` |
| 8 | 資料為空 (重複) | 同 #3 | 同上 |
| 9 | 資料來源不支援伺服器端分頁 | `SqlDataReader` 不支援 GridView 分頁 | 改用 `DataSet`/`DataTable` 或自訂分頁 |
| 10 | 物件名 'xxx' 無效 | 資料庫表名拼錯或不存在 | 核對 SQL 結構與程式碼表名 |
| 11 | 建立連線時出錯 (SQL Server 遠端連線) | SQL Server 未啟用 TCP/IP 或防火牆阻擋 | SQL Server Configuration Manager 啟用協定、開放 1433 埠 |
| 12 | SqlDateTime 溢出 | DateTime.MinValue (0001/1/1) 寫入 SQL datetime | 預設值用 `DateTime.Now` 或 `SqlDateTime.MinValue`,或欄位允許 NULL |
| 13 | 屬性/方法語法錯誤 | VB/C# 語法混淆、DataBinding 語法錯 | 屬性用 `[]`、方法用 `()`;繫結用 `<%# Eval("Field") %>` |
| 14 | 未能從組件載入類型 | 修改程式碼未重新建置 | Rebuild Solution |
| 15 | 程序/函數參數過多 | 呼叫 Stored Procedure 參數不符 | 核對 SP 定義與呼叫參數個數、順序、名稱 |
| 16 | 無法啟動偵錯,繫結控制碼無效 | Terminal Services 未啟動 | services.msc 啟動 Terminal Services |
| 17 | Debug failed because integrated Windows authentication is not enabled | IIS 整合驗證未開啟 | VS 選項 → 偵錯 → 編輯並繼續 → 全勾選 |
| 18 | Automation 找不到 'RegExp' | VBScript DLL 未註冊 | `regsvr32 vbscript.dll` |
| 19 | NullReferenceException | 物件未初始化、控制項 ID 不符、參數為 null | `try-catch`、`Response.Write` 除錯、檢查 `new`、核對控制項名稱 |
| 20 | 錯誤 1718 (安裝 SP1 被數位簽章策略拒絕) | 本地安全策略限制 | 本地安全策略 → 軟體限制 → 強制 → 選「除本機管理員外所有使用者」 |
| 21 | 無法從原始檢視切換到設計檢視 | VS 套件快取異常 | 命令列 `devenv /resetskippkgs` |
| 22 | Validation of viewstate MAC failed | ViewState 驗證失敗 (Web Farm 或設定) | 頁面 `<%@ Page EnableViewStateMac="false" %>` 或同步 MachineKey |
| 23 | Automation server can't create object | `scrrun.dll` 未註冊 | `regsvr32 scrrun.dll` |
| 24 | 套件載入失敗 (Trident Designer) | `gdiplus.dll` 版本衝突 | 複製 `gdiplus.dll` 到 VS Packages 目錄,執行 `devenv /resetskippkgs` |
| 25 | Error spawning 'cmd.exe' | 環境變數或路徑問題 | 複製 `cmd.exe` 到 VS `VC\BIN` 目錄 |
| 26 | 嘗試讀取/寫入受保護的記憶體 | 硬體記憶體故障 | 檢測/更換記憶體模組 |
| 27 | 找不到資訊清單簽章憑證 | 專案簽章設定殘留 | 編輯 `.csproj` 移除 ` |
| 28 | 專案中不存在目標 ResolveKeySource | 非標準 Solution 部署 | VS Developer Command Prompt 執行 MSBuild 修復 |
| 29 | 無法將 NULL 插入欄位 | 資料表欄位 NOT NULL 但傳入 NULL | 檢查參數傳遞、修改資料表結構允許 NULL |
| 30 | 未能載入類型 'Namespace.Class' | 命名空間變更、未建置、ascx 遺失 | 重新建置、手動修正命名空間、納入專案檔 |
| 31 | 無法存取唯讀檔案 | 虛擬目錄權限不足 | 資料夾安全性 → Everyone 加入寫入權限 |
| 32 | HTTP 401 Access Denied | IIS 匿名存取未啟用 | IIS → 認證 → 啟用匿名存取、勾選允許 IIS 控制密碼 |
這 32 個錯誤涵蓋了 ASP.NET 2.0/3.5 時代 90% 的開發阻礙。雖然技術棧已演進,但「驗證攔截」、「空值處理」、「連線管理」、「權限設定」、「部署一致性」等核心議題在現代 .NET Core / ASP.NET Core 依然以不同形式存在。理解背後原理,勝過死記解法。