錯誤一:IIS 無法識別 ASP.NET — 「名稱以無效字元開頭」
錯誤訊息
「名稱以無效字元開頭。處理資源 'https://localhost/...' 時出錯。第 1 行,位置: 2」
原因
ASP.NET 未向 IIS 正確註冊,常見於:
- 先裝 IIS 再裝 .NET Framework
- 多版本 .NET 共存導致對應關係錯亂
- 手動修改 IIS 設定遺漏模組註冊
解決方案:執行 aspnet_regiis.exe 註冊
# .NET Framework 1.1
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis.exe -i
# .NET Framework 2.0 / 3.0 / 3.5
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i
# .NET Framework 4.0 / 4.5+ (32-bit)
C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
# .NET Framework 4.0 / 4.5+ (64-bit) **關鍵**
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
注意:64 位元作業系統**必須執行 Framework64 版本**,否則 IIS 仍無法載入 64 位元模組。執行後 IIS 會重新啟動相關應用程式集區。
補充:缺少 EnvDTE 組件錯誤
錯誤:「未能載入檔案或組件 'EnvDTE, Version=8.0.0.0...'」
解決:搜尋 `EnvDTE.dll`、`EnvDTE80.dll`(通常在 `C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\`),複製至專案 `bin` 目錄。
錯誤二:Web.config 區段重複 — 「在應用程式層級之外使用註冊為 allowDefinition='MachineToApplication' 的區段」
錯誤訊息
「在應用程式層級之外使用註冊為 allowDefinition='MachineToApplication' 的區段是錯誤的。如果在 IIS 中沒有將虛擬目錄設定為應用程式,則可能導致此錯誤。」
原因
專案資料夾結構中存在**多個 `web.config`**,且子資料夾未在 IIS 中轉換為應用程式。典型情況:
- 方案根目錄有 `web.config`,子專案資料夾也有 `web.config`
- 誤將類別庫專案設為 Web 專案產生 `web.config`
- 版本控制合併衝突產生重複設定
解決方案
- 檢視方案總管「顯示所有檔案」,搜尋所有 `web.config`
- 確認**只有網站根目錄**擁有 `web.config`
- 刪除或重命名多餘的 `web.config`(如改為 `web.config.bak`)
- 若子資料夾確需獨立設定,在 IIS 中將該資料夾「轉換為應用程式」
錯誤三:SQL Server 連線失敗 — 「提供者: SQL 網路介面, error: 26 - 找不到指定的伺服器/執行個體」
錯誤訊息
「在建立與伺服器的連線時出錯。在連接到 SQL Server 2005 時,在預設設定下 SQL Server 不允許遠端連線可能會導致此失敗。 (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)」
排查清單(依序執行)
- 確認服務啟動:服務管理員 (`services.msc`) → `SQL Server (SQLEXPRESS)` / `SQL Server (MSSQLSERVER)` → 狀態為「執行中」,啟動類型「自動」
- 啟用遠端連線:SQL Server 組態管理員 → SQL Server 網路設定 → `SQLEXPRESS` 協定 → TCP/IP 啟用、Named Pipes 啟用 → 重啟服務
- 防火牆開放埠:TCP 1433(預設執行個體)、動態埠(具名執行個體)、UDP 1434 (SQL Browser)
- 啟用 SQL Browser 服務:具名執行個體需 `SQL Server Browser` 服務執行中
- 連線字串正確性:
- 本地預設執行個體:`Server=.;Database=MyDB;Trusted_Connection=True;`
- 本地具名執行個體:`Server=.\SQLEXPRESS;Database=MyDB;Trusted_Connection=True;`
- 遠端:`Server=192.168.1.100,1433;Database=MyDB;User Id=sa;Password=****;`
- 使用 UDL 檔案測試:建立 `test.udl` → 雙擊開啟 → 提供者選 `Microsoft OLE DB Provider for SQL Server` → 輸入連線資訊 → 「測試連線」
外部應用組態工具
執行 `cliconfg.exe`(用戶端網路公用程式)→ 別名頁面 → 新增別名驗證協定與伺服器名稱解析。
總結:預防勝於治療
- **安裝順序**:先 .NET Framework,再 IIS,或安裝後執行 `aspnet_regiis -i`
- **專案結構**:單一 `web.config` 原則,子專案勿產生 Web 設定檔
- **連線字串**:集中管理於 `web.config` ``,使用 `ConfigurationManager.ConnectionStrings` 讀取
- **部署檢查清單**:建立標準化部署驗證步驟,包含上述三大項