首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

高版本 Visual Studio 發布預編譯導致 Mono 下 Razor 找不到視圖的解決

     編輯:關於.NET

問題現象

使用 VS2013 / VS2012 Update 2 以上版本發布 ASP.NET MVC 4 專案部署至 Linux Mono 環境時,瀏覽頁面拋出 「Razor 找不到視圖」** 錯誤,但視圖檔案實際存在且大小寫、權限均正確。

建立 MVC4 專案 發布設定 Razor 找不到視圖錯誤

根因分析

VS 高版本發布精靈預設勾選 「發布期間預編譯」** 選項。預編譯會將 .cshtml 視圖編譯為 DLL,並移除原始 .cshtml 檔案。Mono 的 Razor 引擎 (System.Web.Razor) 版本較舊,無法正確載入預編譯產出的組件或尋找視圖路徑**,導致執行時找不到視圖。

發布預編譯選項

解決方法

  1. 在發布精靈的 Settings(設定) 頁籤,取消勾選 「預編譯」** (Precompile during publishing)。
  2. 重新發布專案。
  3. 部署至 Mono 環境,重新整理頁面,視圖即可正常載入。
取消預編譯後正常

影響版本與原理補充

  • 受影響版本:VS2013、VS2012 Update 2 及以上(引入預編譯功能)。
  • 預編譯優點:啟動效能提升、原始碼保護、語法錯誤提前發現。
  • Mono 相容性缺口:Mono 的 ASP.NET 執行環境對預編譯視圖組件的載入機制與 Windows IIS 不完全一致,尤其舊版 Mono (如 3.x/4.x) 支援不足。

替代方案(若需預編譯優勢)

  1. 升級 Mono 至最新穩定版(5.18+ / 6.x),改善預編譯支援。
  2. 使用 aspnet_compiler.exe 手動預編譯,並指定 -fixednames、-u 參數產生固定命名組件,配合 Mono 部署測試。
  3. 遷移至 ASP.NET Core:跨平台原生支援,無 Mono 相容性困擾。

總結

部署至 Mono 時,務必關閉 VS 發布預編譯選項。這是已知的相容性陷阱,若專案必須長期在 Mono 運行,建議規劃遷移至 ASP.NET Core 以獲得完整跨平台支援。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved