安裝 Visual Studio 2013(內含 .NET Framework 4.5.1)後,原本正常的 VS2012 專案在連接資料庫時,ASP.NET 開發伺服器進程(WebDev.WebServer40.exe)直接崩潰,拋出:
System.AccessViolationException: 嘗試讀取或寫入受保護的記憶體。這通常指示其他記憶體已損壞。
.NET 4.5.1 是 4.0/4.5 的**就地升級**,替換了 System.Data.dll、System.Transactions.dll 等核心組件。已知問題:
SNI.dll 載入競爭⚠️ 會影響同機器其他 4.5.1 專案,請評估相容性。
套用微軟官方修正:
或直接安裝 .NET Framework 4.5.2 / 4.6.2 / 4.8(含所有修正,向上相容)。
或在程式啟動早期:
AppContext.SetSwitch("Switch.System.Data.SqlClient.UseManagedSNI", false);
將 WebDev.WebServer40.exe、sqlservr.exe、專案輸出目錄加入防毒例外,關閉「即時掃描 .dll 載入」。
AccessViolationExceptionTargetFramework,CI/CD 構建代理機統一版本「受保護的記憶體」錯誤多為 **CLR 原生層(SNI/Interop)與第三方驅動衝突**,而非程式碼邏輯錯誤。優先升級至 .NET 4.6.2+ 或套用 KB 修補;若環境受限,啟用 UseManagedSNI=false 繞過托管 SNI 層。長期應透過容器化鎖定執行環境,杜絕「在我機器上能跑」的部署地雷。