請檢查 DNT.config 中 DbType 節點數據庫類型是否正確,例如:SqlServer、Access、MySql
異常類型:
System.Exception→TypeInitializationException(Discuz.Data.DatabaseProvider)堆棧:
DatabaseProvider.GetProvider → DatabaseProvider..cctor → Templates.GetValidTemplateIDList → HttpModule.ReUrl_BeginRequest
DNT.config 中 DbType 節點值與實際數據庫驅動程序集不匹配,導致 DatabaseProvider 靜態構造函數拋出異常,進而引發類型初始化失敗。
SqlServer
MySql
Access
常見錯誤:大小寫不符(sqlserver)、拼寫錯誤(MySQL vs MySql)、節點缺失、XML 格式錯誤。
根據 DbType 值,/bin 目錄必須存在對應程序集:
| DbType 值 | 必需程序集 | 備註 |
|---|---|---|
| SqlServer | Discuz.Data.SqlServer.dll | 最常用 |
| MySql | Discuz.Data.MySql.dll | 需 MySQL Connector/NET |
| Access | Discuz.Data.Access.dll | 較少用 |
| PostgreSQL | Discuz.Data.PostgreSQL.dll | 擴展支援 |
| SQLite | Discuz.Data.SQLite.dll | 輕量級 |
缺失對應 DLL 是導致類型初始化失敗的直接原因。
IIS_IUSRS、NETWORK SERVICE 或自定義應用程序池身份具備 讀取/執行 權限DNT.config 文件權限:應用程序池身份可讀,建議 Administrators 完全控制
確保程序集版本重定向正確,避免版本衝突。
異常發生
↓
檢查 DNT.config DbType 值(大小寫、拼寫)
↓
檢查 /bin 目錄對應驅動 DLL 是否存在
↓ (缺失)
從官方包/備份恢復對應 DLL → 重啟 IIS → 解決
↓ (存在)
檢查 IIS 應用程序池版本/管道模式/權限
↓
檢查 Web.config 程序集綁定重定向
↓
修復權限/配置 → 重啟 IIS → 解決
TypeInitializationExceptionDbType 值、對應 DLL、應用程序池配置DNT.config、/bin 完整性DNT.config、Web.config、/bin/*.dll 納入 GitDiscuz 來源異常DNT.config DbType 與 /bin 驅動程序集不匹配是核心原因。三步修復:修正 DbType 值 → 確保對應 DLL 存在 → 驗證 IIS 應用程序池與權限。Discuz! 數據庫提供者工廠模式極其依賴配置與程序集一致性,部署遷移時務必同步檢查。